Greasy Fork is available in English.

Eldarya Enhancements

Enhances the user experience of Eldarya.

Version au 02/08/2021. Voir la dernière version.

// ==UserScript==
// @name            Eldarya Enhancements
// @namespace       https://gitlab.com/NatoBoram/eldarya-enhancements
// @license         GPL-3.0-or-later
// @version         1.2.2
// @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
// @contributionURL https://paypal.me/NatoBoram/5
//
// @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/,a=/\"/g,n=/\n/g,r=/\r/g,i=/\\/g,o=/\u2028/,s=/\u2029/;function c(e){return e.trim?e.trim():e.replace(/^\s*|\s*$/g,"")}function l(e,t,a){if(t.charAt(a)!=e.charAt(0))return!1;for(var n=1,r=e.length;n<r;n++)if(t.charAt(a+n)!=e.charAt(n))return!1;return!0}e.tags={"#":1,"^":2,"<":3,$:4,"/":5,"!":6,">":7,"=":8,_v:9,"{":10,"&":11,_t:12},e.scan=function(a,n){var r,i=a.length,o=0,s=null,u=null,d="",m=[],p=!1,b=0,f=0,g="{{",h="}}";function v(){d.length>0&&(m.push({tag:"_t",text:new String(d)}),d="")}function y(a,n){if(v(),a&&function(){for(var a=!0,n=f;n<m.length;n++)if(!(a=e.tags[m[n].tag]<e.tags._v||"_t"==m[n].tag&&null===m[n].text.match(t)))return!1;return a}())for(var r,i=f;i<m.length;i++)m[i].text&&((r=m[i+1])&&">"==r.tag&&(r.indent=m[i].text.toString()),m.splice(i,1));else n||m.push({tag:"\n"});p=!1,f=m.length}function w(e,t){var a="="+h,n=e.indexOf(a,t),r=c(e.substring(e.indexOf("=",t)+1,n)).split(" ");return g=r[0],h=r[r.length-1],n+a.length-1}for(n&&(n=n.split(" "),g=n[0],h=n[1]),b=0;b<i;b++)0==o?l(g,a,b)?(--b,v(),o=1):"\n"==a.charAt(b)?y(p):d+=a.charAt(b):1==o?(b+=g.length-1,"="==(s=(u=e.tags[a.charAt(b+1)])?a.charAt(b+1):"_v")?(b=w(a,b),o=0):(u&&b++,o=2),p=b):l(h,a,b)?(m.push({tag:s,n:c(d),otag:g,ctag:h,i:"/"==s?p-g.length:b+h.length}),d="",b+=h.length-1,o=0,"{"==s&&("}}"==h?b++:"}"===(r=m[m.length-1]).n.substr(r.n.length-1)&&(r.n=r.n.substring(0,r.n.length-1)))):d+=a.charAt(b);return y(p,!0),m};var u={_t:!0,"\n":!0,$:!0,"/":!0};function d(t,a,n,r){var i,o=[],s=null,c=null;for(i=n[n.length-1];t.length>0;){if(c=t.shift(),i&&"<"==i.tag&&!(c.tag in u))throw new Error("Illegal content in < super tag.");if(e.tags[c.tag]<=e.tags.$||m(c,r))n.push(c),c.nodes=d(t,c.tag,n,r);else{if("/"==c.tag){if(0===n.length)throw new Error("Closing tag without opener: /"+c.n);if(s=n.pop(),c.n!=s.n&&!p(c.n,s.n,r))throw new Error("Nesting error: "+s.n+" vs. "+c.n);return s.end=c.i,o}"\n"==c.tag&&(c.last=0==t.length||"\n"==t[0].tag)}o.push(c)}if(n.length>0)throw new Error("missing closing tag: "+n.pop().n);return o}function m(e,t){for(var a=0,n=t.length;a<n;a++)if(t[a].o==e.n)return e.tag="#",!0}function p(e,t,a){for(var n=0,r=a.length;n<r;n++)if(a[n].c==e&&a[n].o==t)return!0}function b(e){var t=[];for(var a in e.partials)t.push('"'+g(a)+'":{name:"'+g(e.partials[a].name)+'", '+b(e.partials[a])+"}");return"partials: {"+t.join(",")+"}, subs: "+function(e){var t=[];for(var a in e)t.push('"'+g(a)+'": function(c,p,t,i) {'+e[a]+"}");return"{ "+t.join(",")+" }"}(e.subs)}e.stringify=function(t,a,n){return"{code: function (c,p,i) { "+e.wrapMain(t.code)+" },"+b(t)+"}"};var f=0;function g(e){return e.replace(i,"\\\\").replace(a,'\\"').replace(n,"\\n").replace(r,"\\r").replace(o,"\\u2028").replace(s,"\\u2029")}function h(e){return~e.indexOf(".")?"d":"f"}function v(e,t){var a="<"+(t.prefix||"")+e.n+f++;return t.partials[a]={name:e.n,partials:{}},t.code+='t.b(t.rp("'+g(a)+'",c,p,"'+(e.indent||"")+'"));',a}function y(e,t){t.code+="t.b(t.t(t."+h(e.n)+'("'+g(e.n)+'",c,p,0)));'}function w(e){return"t.b("+e+");"}e.generate=function(t,a,n){f=0;var r={code:"",subs:{},partials:{}};return e.walk(t,r),n.asString?this.stringify(r,a,n):this.makeTemplate(r,a,n)},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,a){var n=this.makePartials(e);return n.code=new Function("c","p","i",this.wrapMain(e.code)),new this.template(n,t,this,a)},e.makePartials=function(e){var t,a={subs:{},partials:e.partials,name:e.name};for(t in a.partials)a.partials[t]=this.makePartials(a.partials[t]);for(t in e.subs)a.subs[t]=new Function("c","p","t","i",e.subs[t]);return a},e.codegen={"#":function(t,a){a.code+="if(t.s(t."+h(t.n)+'("'+g(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,a),a.code+="});c.pop();}"},"^":function(t,a){a.code+="if(!t.s(t."+h(t.n)+'("'+g(t.n)+'",c,p,1),c,p,1,0,0,"")){',e.walk(t.nodes,a),a.code+="};"},">":v,"<":function(t,a){var n={partials:{},code:"",subs:{},inPartial:!0};e.walk(t.nodes,n);var r=a.partials[v(t,a)];r.subs=n.subs,r.partials=n.partials},$:function(t,a){var n={subs:{},code:"",partials:a.partials,prefix:t.n};e.walk(t.nodes,n),a.subs[t.n]=n.code,a.inPartial||(a.code+='t.sub("'+g(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."+h(e.n)+'("'+g(e.n)+'",c,p,0)));'},_t:function(e,t){t.code+=w('"'+g(e.text)+'"')},"{":y,"&":y},e.walk=function(t,a){for(var n,r=0,i=t.length;r<i;r++)(n=e.codegen[t[r].tag])&&n(t[r],a);return a},e.parse=function(e,t,a){return d(e,0,[],(a=a||{}).sectionTags||[])},e.cache={},e.cacheKey=function(e,t){return[e,!!t.asString,!!t.disableLambda,t.delimiters,!!t.modelGet].join("||")},e.compile=function(t,a){a=a||{};var n=e.cacheKey(t,a),r=this.cache[n];if(r){var i=r.partials;for(var o in i)delete i[o].instance;return r}return r=this.generate(this.parse(this.scan(t,a.delimiters),t,a),t,a),this.cache[n]=r}}(t)},508:(e,t,a)=>{var n=a(329);n.Template=a(14).Template,n.template=n.Template,e.exports=n},14:(e,t)=>{!function(e){function t(e,t,a){var n;return t&&"object"==typeof t&&(void 0!==t[e]?n=t[e]:a&&t.get&&"function"==typeof t.get&&(n=t.get(e))),n}e.Template=function(e,t,a,n){e=e||{},this.r=e.code||this.r,this.c=a,this.options=n||{},this.text=t||"",this.partials=e.partials||{},this.subs=e.subs||{},this.buf=""},e.Template.prototype={r:function(e,t,a){return""},v:function(e){return e=c(e),s.test(e)?e.replace(a,"&amp;").replace(n,"&lt;").replace(r,"&gt;").replace(i,"&#39;").replace(o,"&quot;"):e},t:c,render:function(e,t,a){return this.ri([e],t||{},a)},ri:function(e,t,a){return this.r(e,t,a)},ep:function(e,t){var a=this.partials[e],n=t[a.name];if(a.instance&&a.base==n)return a.instance;if("string"==typeof n){if(!this.c)throw new Error("No compiler available.");n=this.c.compile(n,this.options)}if(!n)return null;if(this.partials[e].base=n,a.subs){for(key in t.stackText||(t.stackText={}),a.subs)t.stackText[key]||(t.stackText[key]=void 0!==this.activeSub&&t.stackText[this.activeSub]?t.stackText[this.activeSub]:this.text);n=function(e,t,a,n,r,i){function o(){}function s(){}var c;o.prototype=e,s.prototype=e.subs;var l=new o;for(c in l.subs=new s,l.subsText={},l.buf="",n=n||{},l.stackSubs=n,l.subsText=i,t)n[c]||(n[c]=t[c]);for(c in n)l.subs[c]=n[c];for(c in r=r||{},l.stackPartials=r,a)r[c]||(r[c]=a[c]);for(c in r)l.partials[c]=r[c];return l}(n,a.subs,a.partials,this.stackSubs,this.stackPartials,t.stackText)}return this.partials[e].instance=n,n},rp:function(e,t,a,n){var r=this.ep(e,a);return r?r.ri(t,a,n):""},rs:function(e,t,a){var n=e[e.length-1];if(l(n))for(var r=0;r<n.length;r++)e.push(n[r]),a(e,t,this),e.pop();else a(e,t,this)},s:function(e,t,a,n,r,i,o){var s;return(!l(e)||0!==e.length)&&("function"==typeof e&&(e=this.ms(e,t,a,n,r,i,o)),s=!!e,!n&&s&&t&&t.push("object"==typeof e?e:t[t.length-1]),s)},d:function(e,a,n,r){var i,o=e.split("."),s=this.f(o[0],a,n,r),c=this.options.modelGet,u=null;if("."===e&&l(a[a.length-2]))s=a[a.length-1];else for(var d=1;d<o.length;d++)void 0!==(i=t(o[d],s,c))?(u=s,s=i):s="";return!(r&&!s)&&(r||"function"!=typeof s||(a.push(u),s=this.mv(s,a,n),a.pop()),s)},f:function(e,a,n,r){for(var i=!1,o=!1,s=this.options.modelGet,c=a.length-1;c>=0;c--)if(void 0!==(i=t(e,a[c],s))){o=!0;break}return o?(r||"function"!=typeof i||(i=this.mv(i,a,n)),i):!r&&""},ls:function(e,t,a,n,r){var i=this.options.delimiters;return this.options.delimiters=r,this.b(this.ct(c(e.call(t,n)),t,a)),this.options.delimiters=i,!1},ct:function(e,t,a){if(this.options.disableLambda)throw new Error("Lambda features disabled.");return this.c.compile(e,this.options).render(t,a)},b:function(e){this.buf+=e},fl:function(){var e=this.buf;return this.buf="",e},ms:function(e,t,a,n,r,i,o){var s,c=t[t.length-1],l=e.call(c);return"function"==typeof l?!!n||(s=this.activeSub&&this.subsText&&this.subsText[this.activeSub]?this.subsText[this.activeSub]:this.text,this.ls(l,c,a,s.substring(r,i),o)):l},mv:function(e,t,a){var n=t[t.length-1],r=e.call(n);return"function"==typeof r?this.ct(c(r.call(n)),n,a):r},sub:function(e,t,a,n){var r=this.subs[e];r&&(this.activeSub=e,r(t,a,this,n),this.activeSub=!1)}};var a=/&/g,n=/</g,r=/>/g,i=/\'/g,o=/\"/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)},604:(e,t,a)=>{var n=a(508);e.exports=new n.Template({code:function(e,t,a){var n=this;return n.b(a=a||""),n.b('<li id="appearance-item-'),n.b(n.v(n.f("itemid",e,t,0))),n.b('" class="appearance-item group-'),n.b(n.v(n.f("group",e,t,0))),n.b('" data-itemid="'),n.b(n.v(n.f("itemid",e,t,0))),n.b('" data-name="'),n.b(n.v(n.f("name",e,t,0))),n.b('" data-rarity="'),n.b(n.v(n.f("rarity",e,t,0))),n.b('" data-rarityname="'),n.b(n.v(n.f("rarityname",e,t,0))),n.b('"><div class="rarity-marker-'),n.b(n.v(n.f("rarity",e,t,0))),n.b('"></div><img class="appearance-item-icon" src="'),n.b(n.v(n.f("icon",e,t,0))),n.b('"></li>'),n.fl()},partials:{},subs:{}})},281:(e,t,a)=>{var n=a(508);e.exports=new n.Template({code:function(e,t,a){var n=this;return n.b(a=a||""),n.b('<div id="ee-category" class="appearance-items-category active" data-category="'),n.b(n.v(n.f("category",e,t,0))),n.b('" data-categoryid="'),n.b(n.v(n.f("categoryid",e,t,0))),n.b('"><style>#ee-items {'),n.b("\n"+a),n.b("      scrollbar-color: dark;"),n.b("\n"+a),n.b("      scrollbar-width: thin;"),n.b("\n"+a),n.b('    }</style><ul class="appearance-items-list" id="ee-items" style="max-height: calc(100vh - 565px)"> '),n.b(n.t(n.f("items",e,t,0))),n.b('</ul><div id="ee-info" class="appearance-items-info"><div class="appearance-info-tips"></div><h3 class="appearance-item-info-name"></h3><div class="appearance-item-info-guard"></div><div class="appearance-item-info-rarity"></div><div class="appearance-item-info-buttons"><div class="appearance-forward nl-button"> '),n.b(n.v(n.d("translate.appearance.buttons.forward",e,t,0))),n.b(' </div><div class="appearance-backward nl-button"> '),n.b(n.v(n.d("translate.appearance.buttons.backward",e,t,0))),n.b(" </div></div></div></div>"),n.fl()},partials:{},subs:{}})},188:(e,t,a)=>{var n=a(508);e.exports=new n.Template({code:function(e,t,a){var n=this;return n.b(a=a||""),n.b('<div id="appearance-items-group-'),n.b(n.v(n.f("group",e,t,0))),n.b('" class="appearance-items-category" data-categoryid="'),n.b(n.v(n.f("categoryid",e,t,0))),n.b('" data-category="'),n.b(n.v(n.f("category",e,t,0))),n.b('"><ul class="appearance-items-list"> '),n.b(n.t(n.f("items",e,t,0))),n.b("</ul></div>"),n.fl()},partials:{},subs:{}})},314:(e,t,a)=>{var n=a(508);e.exports=new n.Template({code:function(e,t,a){var n=this;return n.b(a=a||""),n.b('<div id="marketplace-itemDetail-info-autobuy" style="text-align: center; margin: 20px auto"><div class="nl-button">'),n.b(n.v(n.d("translate.market.add_to_wishlist.title",e,t,0))),n.b("</div></div>"),n.fl()},partials:{},subs:{}})},823:(e,t,a)=>{var n=a(508);e.exports=new n.Template({code:function(e,t,a){var n=this;return n.b(a=a||""),n.b("<h1>"),n.b(n.v(n.d("translate.market.add_to_wishlist.title",e,t,0))),n.b("</h1><p>"),n.b(n.v(n.d("translate.market.add_to_wishlist.text",e,t,0))),n.b("</p>"),n.fl()},partials:{},subs:{}})},875:(e,t,a)=>{var n=a(508);e.exports=new n.Template({code:function(e,t,a){var n=this;return n.b(a=a||""),n.b('<button id="auto-explore-button" class="nl-button '),n.s(n.f("active",e,t,1),e,t,0,61,67,"{{ }}")&&(n.rs(e,t,(function(e,t,a){a.b("active")})),e.pop()),n.b('" data-id="'),n.b(n.v(n.f("locationId",e,t,0))),n.b('" data-mapid="'),n.b(n.v(n.f("regionId",e,t,0))),n.b('"> '),n.b(n.v(n.d("translate.pet.auto_explore",e,t,0))),n.b(" </button>"),n.fl()},partials:{},subs:{}})},677:(e,t,a)=>{var n=a(508);e.exports=new n.Template({code:function(e,t,a){var n=this;return n.b(a=a||""),n.b('<a id="'),n.b(n.v(n.f("id",e,t,0))),n.b('" class="carousel-news carousel-ee" href="" style="background-image: url('),n.b(n.v(n.f("backgroundImage",e,t,0))),n.b(')"><div><h4>'),n.b(n.v(n.f("h4",e,t,0))),n.b("</h4><h5>"),n.b(n.v(n.f("h5",e,t,0))),n.b("</h5><p>"),n.b(n.v(n.f("p",e,t,0))),n.b("</p></div></a>"),n.fl()},partials:{},subs:{}})},560:(e,t,a)=>{var n=a(508);e.exports=new n.Template({code:function(e,t,a){var n=this;return n.b(a=a||""),n.b("<h1>"),n.b(n.v(n.d("translate.market.change_price.title",e,t,0))),n.b("</h1><p>"),n.b(n.v(n.d("translate.market.change_price.text",e,t,0))),n.b("</p>"),n.fl()},partials:{},subs:{}})},391:(e,t,a)=>{var n=a(508);e.exports=new n.Template({code:function(e,t,a){var n=this;return n.b(a=a||""),n.b("<h1>"),n.b(n.v(n.d("translate.appearance.favourites.save_outfit.title",e,t,0))),n.b("</h1><p>"),n.b(n.t(n.d("translate.appearance.favourites.save_outfit.saved_locally",e,t,0))),n.b("</p><br><p>"),n.b(n.t(n.d("translate.appearance.favourites.save_outfit.goto_account",e,t,0))),n.b('</p><input id="choose-name" maxlength="30" minlength="1" placeholder="'),n.b(n.v(n.d("translate.appearance.favourites.save_outfit.placeholder",e,t,0))),n.b('">'),n.fl()},partials:{},subs:{}})},411:(e,t,a)=>{var n=a(508);e.exports=new n.Template({code:function(e,t,a){var n=this;return n.b(a=a||""),n.b("<style>.created-outfit-popup .flavr-outer .flavr-message::after {"),n.b("\n"+a),n.b("    background-image: url("),n.b(n.v(n.f("url",e,t,0))),n.b(");"),n.b("\n"+a),n.b("    background-size: contain;"),n.b("\n"+a),n.b("  }</style><h1>"),n.b(n.v(n.f("name",e,t,0))),n.b("</h1><p>"),n.b(n.t(n.d("translate.appearance.favourites.click_outfit.saved_locally",e,t,0))),n.b("</p><br><p>"),n.b(n.t(n.d("translate.appearance.favourites.click_outfit.goto_account",e,t,0))),n.b("</p>"),n.fl()},partials:{},subs:{}})},779:(e,t,a)=>{var n=a(508);e.exports=new n.Template({code:function(e,t,a){var n=this;return n.b(a=a||""),n.b('<button id="'),n.b(n.v(n.f("id",e,t,0))),n.b('" class="nl-button favorites-action-ee">'),n.b(n.v(n.f("text",e,t,0))),n.b("</button>"),n.fl()},partials:{},subs:{}})},369:(e,t,a)=>{var n=a(508);e.exports=new n.Template({code:function(e,t,a){var n=this;return n.b(a=a||""),n.b('<img 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('" height="21" style="display: inline-block; margin: -2px auto"> '),n.b(n.t(n.f("message",e,t,0))),n.fl()},partials:{},subs:{}})},810:(e,t,a)=>{var n=a(508);e.exports=new n.Template({code:function(e,t,a){var n=this;return n.b(a=a||""),n.b('<li id="header-takeover" title="'),n.b(n.v(n.d("translate.home.takeover",e,t,0))),n.b('" style="transition: transform ease-in-out 200ms; cursor: pointer" onMouseOver="this.style.transform=\'scale(1.3)\'" onMouseOut="this.style.transform=\'scale(1)\'"><a><img src="/static/img/new-layout/home/connected/lock.png" alt="'),n.b(n.v(n.d("translate.home.takeover",e,t,0))),n.b('" style="filter: contrast(0%) brightness(200%) '),n.s(n.f("takeover",e,t,1),e,t,1,0,0,"")||n.b("opacity(0)"),n.b('" height="21"></a></li>'),n.fl()},partials:{},subs:{}})},342:(e,t,a)=>{var n=a(508);e.exports=new n.Template({code:function(e,t,a){var n=this;return n.b(a=a||""),n.b('<a id="home-'),n.b(n.v(n.f("id",e,t,0))),n.b('" class="home-content-tile home-content-small home-content-small-ee" href="'),n.b(n.v(n.f("href",e,t,0))),n.b('" style="background-image: url('),n.b(n.v(n.f("backgroundImage",e,t,0))),n.b(');"><h4>'),n.b(n.v(n.f("h4",e,t,0))),n.b("</h4></a>"),n.fl()},partials:{},subs:{}})},118:(e,t,a)=>{var n=a(508);e.exports=new n.Template({code:function(e,t,a){var n=this;return n.b(a=a||""),n.b('<li class="main-menu-'),n.b(n.v(n.f("class",e,t,0))),n.b(' main-menu-ee"><a href="'),n.b(n.v(n.f("href",e,t,0))),n.b('">'),n.b(n.v(n.f("text",e,t,0))),n.b("</a></li>"),n.fl()},partials:{},subs:{}})},266:(e,t,a)=>{var n=a(508);e.exports=new n.Template({code:function(e,t,a){var n=this;return n.b(a=a||""),n.b("<style>/* #marketplace-abstract-purchases and #marketplace-abstract-sales were"),n.b("\n"+a),n.b("  re-written to target #purchase-history and #sale-history. */"),n.b("\n"),n.b("\n"+a),n.b("  #purchase-history,"),n.b("\n"+a),n.b("  #sale-history {"),n.b("\n"+a),n.b("    height: 600px;"),n.b("\n"+a),n.b("    position: relative;"),n.b("\n"+a),n.b("    width: 360px;"),n.b("\n"+a),n.b("    display: inline-block;"),n.b("\n"+a),n.b("    vertical-align: top;"),n.b("\n"+a),n.b("  }"),n.b("\n"),n.b("\n"+a),n.b("  #sale-history .abstract-actions,"),n.b("\n"+a),n.b("  #purchase-history .abstract-actions {"),n.b("\n"+a),n.b("    position: relative;"),n.b("\n"+a),n.b("    top: -40px;"),n.b("\n"+a),n.b("    display: flex;"),n.b("\n"+a),n.b("    flex-direction: column;"),n.b("\n"+a),n.b("    justify-content: space-evenly;"),n.b("\n"+a),n.b("    height: 80px;"),n.b("\n"+a),n.b("  }"),n.b("\n"),n.b("\n"+a),n.b("  #sale-history .abstract-time,"),n.b("\n"+a),n.b("  #purchase-history .abstract-time {"),n.b("\n"+a),n.b("    position: static;"),n.b("\n"+a),n.b("    display: inline;"),n.b("\n"+a),n.b("    height: auto;"),n.b("\n"+a),n.b("    color: #fb8900;"),n.b("\n"+a),n.b("    font-weight: bold;"),n.b("\n"+a),n.b("    font-size: 13px;"),n.b("\n"+a),n.b("  }"),n.b("\n"),n.b("\n"+a),n.b("  #purchase-history {"),n.b("\n"+a),n.b("    margin-right: 80px;"),n.b("\n"+a),n.b("  }"),n.b("\n"),n.b("\n"+a),n.b("  #purchase-history:before {"),n.b("\n"+a),n.b('    content: "";'),n.b("\n"+a),n.b("    position: absolute;"),n.b("\n"+a),n.b("    top: 120px;"),n.b("\n"+a),n.b("    right: -42px;"),n.b("\n"+a),n.b("    border-right: solid 2px #aaa;"),n.b("\n"+a),n.b("    height: 320px;"),n.b("\n"+a),n.b("  }"),n.b("\n"),n.b("\n"+a),n.b("  /* Custom fixes to the layout */"),n.b("\n"),n.b("\n"+a),n.b("  #purchase-history li {"),n.b("\n"+a),n.b("    margin-left: 4px;"),n.b("\n"+a),n.b("    margin-right: 4px;"),n.b("\n"+a),n.b('  }</style><div class="marketplace-abstract" id="purchase-history"><h2 class="section-subtitle"> '),n.b(n.v(n.d("translate.market.auctions.purchase_history",e,t,0))),n.b(' </h2><ul class="marketplace-purchases-items"> '),n.s(n.f("purchases",e,t,1),e,t,0,1242,2128,"{{ }}")&&(n.rs(e,t,(function(e,t,a){a.b(' <li data-itemid="'),a.b(a.v(a.f("itemid",e,t,0))),a.b('" class="marketplace-abstract marketplace-auctions-item marketplace-sales-item"><div class="abstract-icon"><img src="'),a.b(a.v(a.f("icon",e,t,0))),a.b('"></div><div class="abstract-container"><div class="abstract-name">'),a.b(a.v(a.f("name",e,t,0))),a.b('</div><div class="abstract-content"><div class="abstract-currentPrice"> '),a.s(a.f("currentPrice",e,t,1),e,t,0,1559,1691,"{{ }}")&&(a.rs(e,t,(function(e,t,a){a.b(" "),a.b(a.v(a.d("translate.market.auctions.current_price",e,t,0))),a.b(' <span class="price-item">'),a.b(a.v(a.d("currentPrice.price",e,t,0))),a.b('</span><span class="maana-icon"></span> ')})),e.pop()),a.b(" <br> "),a.s(a.f("buyNowPrice",e,t,1),e,t,0,1730,1861,"{{ }}")&&(a.rs(e,t,(function(e,t,a){a.b(" "),a.b(a.v(a.d("translate.market.auctions.buy_now_price",e,t,0))),a.b(' <span class="price-item">'),a.b(a.v(a.d("buyNowPrice.price",e,t,0))),a.b('</span><span class="maana-icon"></span> ')})),e.pop()),a.b(' </div></div></div><div class="abstract-actions"><div class="abstract-time">'),a.b(a.v(a.f("date",e,t,0))),a.b('</div><div class="nl-button nl-button-sm marketplace-itemDetail-cancel delete-button" data-itemid="'),a.b(a.v(a.f("itemid",e,t,0))),a.b('"> '),a.b(a.v(a.d("translate.market.auctions.delete",e,t,0))),a.b(" </div></div></li> ")})),e.pop()),n.b(' </ul></div><div class="marketplace-abstract" id="sale-history"><h2 class="section-subtitle">'),n.b(n.v(n.d("translate.market.auctions.sales_history",e,t,0))),n.b('</h2><ul class="marketplace-sales-items"> '),n.s(n.f("sales",e,t,1),e,t,0,2330,3128,"{{ }}")&&(n.rs(e,t,(function(e,t,a){a.b(' <li class="marketplace-abstract marketplace-sales-item"><div class="abstract-icon"><img src="'),a.b(a.v(a.f("icon",e,t,0))),a.b('"></div><div class="abstract-container"><div class="abstract-name">'),a.b(a.v(a.f("name",e,t,0))),a.b('</div><div class="abstract-content"><div class="abstract-currentPrice"> '),a.s(a.f("currentPrice",e,t,1),e,t,0,2596,2722,"{{ }}")&&(a.rs(e,t,(function(e,t,a){a.b(" "),a.b(a.v(a.d("translate.market.auctions.current_price",e,t,0))),a.b(' <span class="price-item">'),a.b(a.v(a.f("currentPrice",e,t,0))),a.b('</span><span class="maana-icon"></span> ')})),e.pop()),a.b(" <br> "),a.s(a.f("buyNowPrice",e,t,1),e,t,0,2761,2886,"{{ }}")&&(a.rs(e,t,(function(e,t,a){a.b(" "),a.b(a.v(a.d("translate.market.auctions.buy_now_price",e,t,0))),a.b(' <span class="price-item">'),a.b(a.v(a.f("buyNowPrice",e,t,0))),a.b('</span><span class="maana-icon"></span> ')})),e.pop()),a.b(' </div></div></div><div class="abstract-actions"><div class="abstract-time">'),a.b(a.v(a.f("date",e,t,0))),a.b('</div><div class="nl-button nl-button-sm marketplace-itemDetail-cancel delete-button"> '),a.b(a.v(a.d("translate.market.auctions.delete",e,t,0))),a.b(" </div></div></li> ")})),e.pop()),n.b(" </ul></div>"),n.fl()},partials:{},subs:{}})},275:(e,t,a)=>{var n=a(508);e.exports=new n.Template({code:function(e,t,a){var n=this;return n.b(a=a||""),n.b('<div id="ee-outfit-thumbs"><style>#appearance-items-category-favorites .slot.ee-available-slot {'),n.b("\n"+a),n.b("      background-image: url(https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/available-favorite.png);"),n.b("\n"+a),n.b("      background-position: -14px -11px;"),n.b("\n"+a),n.b("      background-size: 171px 244px;"),n.b("\n"+a),n.b("      border-radius: 44px;"),n.b("\n"+a),n.b("      box-shadow: 0 0 4px 4px rgba(255, 255, 255, 0.8);"),n.b("\n"+a),n.b("    }"),n.b("\n"),n.b("\n"+a),n.b("    #appearance-items-category-favorites .slot.ee-available-slot::after {"),n.b("\n"+a),n.b("      background: url(/static/img/new-layout/wardrobe/icon-plus.png);"),n.b("\n"+a),n.b('      content: " ";'),n.b("\n"+a),n.b("      filter: drop-shadow(0 0 6px rgba(237, 12, 245, 0.9));"),n.b("\n"+a),n.b("      height: 71px;"),n.b("\n"+a),n.b("      left: 50%;"),n.b("\n"+a),n.b("      opacity: 0;"),n.b("\n"+a),n.b("      position: absolute;"),n.b("\n"+a),n.b("      top: 50%;"),n.b("\n"+a),n.b("      transform: translate(-50%, -50%);"),n.b("\n"+a),n.b("      transition: opacity ease-in-out 100ms;"),n.b("\n"+a),n.b("      width: 66px;"),n.b("\n"+a),n.b("    }"),n.b("\n"),n.b("\n"+a),n.b("    #appearance-items-category-favorites .slot.ee-available-slot:hover::after,"),n.b("\n"+a),n.b("    #appearance-items-category-favorites .slot.ee-outfit-thumb:hover p {"),n.b("\n"+a),n.b("      opacity: 1;"),n.b("\n"+a),n.b("    }"),n.b("\n"),n.b("\n"+a),n.b("    #appearance-items-category-favorites .slot.ee-outfit-thumb img {"),n.b("\n"+a),n.b("      border-radius: 44px;"),n.b("\n"+a),n.b("      height: 100%;"),n.b("\n"+a),n.b("      width: 100%;"),n.b("\n"+a),n.b("    }"),n.b("\n"),n.b("\n"+a),n.b("    #appearance-items-category-favorites .slot.ee-outfit-thumb p {"),n.b("\n"+a),n.b("      background: rgba(0, 0, 0, 0.5);"),n.b("\n"+a),n.b("      color: #fff;"),n.b("\n"+a),n.b('      font-family: "Alegreya Sans SC", sans-serif;'),n.b("\n"+a),n.b("      font-size: 22px;"),n.b("\n"+a),n.b("      font-weight: 700;"),n.b("\n"+a),n.b("      left: 50%;"),n.b("\n"+a),n.b("      line-height: 22px;"),n.b("\n"+a),n.b("      opacity: 0;"),n.b("\n"+a),n.b("      padding: 12px 0;"),n.b("\n"+a),n.b("      position: absolute;"),n.b("\n"+a),n.b("      text-align: center;"),n.b("\n"+a),n.b("      top: 50%;"),n.b("\n"+a),n.b("      transform: translate(-50%, -50%);"),n.b("\n"+a),n.b("      transition: opacity ease-in-out 400ms;"),n.b("\n"+a),n.b("      width: 100%;"),n.b("\n"+a),n.b("    }</style> "),n.s(n.f("outfits",e,t,1),e,t,0,1640,1757,"{{ }}")&&(n.rs(e,t,(function(e,t,a){a.b(' <div class="slot ee-outfit-thumb" data-array-index="'),a.b(a.v(a.f("id",e,t,0))),a.b('"><img alt="'),a.b(a.v(a.f("name",e,t,0))),a.b('" src="'),a.b(a.v(a.f("url",e,t,0))),a.b('"><p>'),a.b(a.v(a.f("name",e,t,0))),a.b("</p></div> ")})),e.pop()),n.b(' <div class="slot ee-available-slot"></div></div>'),n.fl()},partials:{},subs:{}})},408:(e,t,a)=>{var n=a(508);e.exports=new n.Template({code:function(e,t,a){var n=this;return n.b(a=a||""),n.b('<li id="'),n.b(n.v(n.f("id",e,t,0))),n.b('" class="profile-contact-action-ee"><span class="nl-button nl-button-sm"><div class="action-description">'),n.b(n.v(n.f("actionDescription",e,t,0))),n.b("</div></span></li>"),n.fl()},partials:{},subs:{}})},278:(e,t,a)=>{var n=a(508);e.exports=new n.Template({code:function(e,t,a){var n=this;return n.b(a=a||""),n.b('<div class="account-misc-bloc account-ee-bloc bloc"><h2 class="section-title">'),n.b(n.v(n.d("translate.account.enhancements",e,t,0))),n.b('</h2><ul class="account-misc-actions"><li id="ee-debug-enabled" class="nl-button nl-button-sm '),n.s(n.f("debug",e,t,1),e,t,0,216,222,"{{ }}")&&(n.rs(e,t,(function(e,t,a){a.b("active")})),e.pop()),n.b('" title="'),n.b(n.v(n.d("translate.account.debug_tooltip",e,t,0))),n.b('"> '),n.b(n.v(n.d("translate.account.debug",e,t,0))),n.b(' </li><li id="ee-minigames-enabled" class="nl-button nl-button-sm '),n.s(n.f("minigames",e,t,1),e,t,0,386,392,"{{ }}")&&(n.rs(e,t,(function(e,t,a){a.b("active")})),e.pop()),n.b('"> '),n.b(n.v(n.d("translate.account.minigames",e,t,0))),n.b(' </li><li id="ee-explorations-enabled" class="nl-button nl-button-sm '),n.s(n.f("explorations",e,t,1),e,t,0,526,532,"{{ }}")&&(n.rs(e,t,(function(e,t,a){a.b("active")})),e.pop()),n.b('"> '),n.b(n.v(n.d("translate.account.explorations",e,t,0))),n.b(' </li><li id="ee-market-enabled" class="nl-button nl-button-sm '),n.s(n.f("market",e,t,1),e,t,0,660,666,"{{ }}")&&(n.rs(e,t,(function(e,t,a){a.b("active")})),e.pop()),n.b('"> '),n.b(n.v(n.d("translate.account.market",e,t,0))),n.b(' </li><li id="ee-import" class="nl-button nl-button-sm"> '),n.b(n.v(n.d("translate.account.import",e,t,0))),n.b(' </li><li id="ee-export" class="nl-button nl-button-sm"> '),n.b(n.v(n.d("translate.account.export",e,t,0))),n.b(" </li></ul></div>"),n.fl()},partials:{},subs:{}})},520:(e,t,a)=>{var n=a(508);e.exports=new n.Template({code:function(e,t,a){var n=this;return n.b(a=a||""),n.b('<a id="wishlist-button" class="nl-button"> '),n.b(n.v(n.d("translate.market.wishlist.title",e,t,0))),n.b(" </a>"),n.fl()},partials:{},subs:{}})},47:(e,t,a)=>{var n=a(508);e.exports=new n.Template({code:function(e,t,a){var n=this;return n.b(a=a||""),n.b("<style>table {"),n.b("\n"+a),n.b("    text-align: center;"),n.b("\n"+a),n.b("    width: 100%;"),n.b("\n"+a),n.b("  }"),n.b("\n"),n.b("\n"+a),n.b("  .action-picto {"),n.b("\n"+a),n.b("    height: 50px;"),n.b("\n"+a),n.b("    width: 50px;"),n.b("\n"+a),n.b("    cursor: pointer;"),n.b("\n"+a),n.b("  }"),n.b("\n"),n.b("\n"+a),n.b("  .action-picto:hover:not(.disabled),"),n.b("\n"+a),n.b("  .edit-price:hover {"),n.b("\n"+a),n.b("    animation: button-bounce 300ms linear forwards;"),n.b("\n"+a),n.b("    filter: brightness(1.05) contrast(1.1);"),n.b("\n"+a),n.b("  }"),n.b("\n"),n.b("\n"+a),n.b("  .edit-price {"),n.b("\n"+a),n.b("    cursor: pointer;"),n.b("\n"+a),n.b("  }"),n.b("\n"),n.b("\n"+a),n.b("  img.disabled {"),n.b("\n"+a),n.b("    filter: grayscale(1);"),n.b("\n"+a),n.b("  }"),n.b("\n"),n.b("\n"+a),n.b("  .item-icon {"),n.b("\n"+a),n.b("    width: 100px;"),n.b("\n"+a),n.b("    height: 100px;"),n.b("\n"+a),n.b("  }</style><table><thead><tr><th>"),n.b(n.v(n.d("translate.market.wishlist.icon",e,t,0))),n.b("</th><th>"),n.b(n.v(n.d("translate.market.wishlist.name",e,t,0))),n.b("</th><th>"),n.b(n.v(n.d("translate.market.wishlist.price",e,t,0))),n.b("</th><th>"),n.b(n.v(n.d("translate.market.wishlist.status",e,t,0))),n.b("</th><th>"),n.b(n.v(n.d("translate.market.wishlist.actions",e,t,0))),n.b("</th></tr></thead><tbody> "),n.s(n.f("wishlist",e,t,1),e,t,0,727,1556,"{{ }}")&&(n.rs(e,t,(function(e,t,a){a.b(' <tr class="marketplace-abstract" data-wearableitemid="'),a.b(a.v(a.f("wearableitemid",e,t,0))),a.b('"><td><img class="item-icon" src="'),a.b(a.v(a.f("icon",e,t,0))),a.b('" alt="'),a.b(a.v(a.f("name",e,t,0))),a.b('"></td><td><div class="abstract-name">'),a.b(a.v(a.f("name",e,t,0))),a.b('</div></td><td><div class="edit-price" title="'),a.b(a.v(a.d("translate.market.wishlist.change_price",e,t,0))),a.b('"><span class="price-item">'),a.b(a.v(a.f("price",e,t,0))),a.b('</span><span class="maana-icon" alt="maanas"></span></div></td><td><p class="error">'),a.b(a.v(a.f("error",e,t,0))),a.b('</p></td><td><img class="action-picto reset-item-status '),a.s(a.f("error",e,t,1),e,t,1,0,0,"")||a.b("disabled"),a.b('" src="/static/img/new-layout/wardrobe/reset-btn.png" title="'),a.b(a.v(a.d("translate.market.wishlist.reset_tooltip",e,t,0))),a.b('" alt="'),a.b(a.v(a.d("translate.market.wishlist.reset",e,t,0))),a.b('"> <img class="action-picto delete-wishlist-item" src="/static/img/new-layout/wardrobe/delete.png" title="'),a.b(a.v(a.d("translate.market.wishlist.delete_tooltip",e,t,0))),a.b('" alt="'),a.b(a.v(a.d("translate.market.wishlist.delete",e,t,0))),a.b('"></td></tr> ')})),e.pop()),n.b(" </tbody></table>"),n.fl()},partials:{},subs:{}})}},t={};function a(n){var r=t[n];if(void 0!==r)return r.exports;var i=t[n]={exports:{}};return e[n](i,i.exports,a),i.exports}(()=>{"use strict";const e={home:{forum:"Forum",script_loaded:`${GM.info.script.name} v${GM.info.script.version} loaded.`,takeover:"Takeover"},takeover:{bought:(e,t)=>`Bought <strong>${e}</strong> for <strong class="price-item">${t}</strong> <span class="maana-icon" alt="maanas"></span>.`,disabled:"Takeover mode disabled.",enabled:"Takeover mode enabled. Please do not interact with this tab."},carousel:{beemoov_annoyances:{title:"Beemoov Annoyances",subtitle:"Block some of Eldarya's annoyances."},download_face:{title:"Download your guardian's face!",subtitle:"Click here to download your guardian's face."},download_guardian:{title:"Download your guardian!",subtitle:"Click here to download your guardian."},eldarya_enhancements:{title:`${GM.info.script.name} v${GM.info.script.version}`,subtitle:GM.info.script.description},takeover:{disable_takeover:"Disable Takeover",enable_takeover:"Enable Takeover",subtitle:"Give up this tab to perform automated actions.",title:"Takeover"}},minigames:{playing:e=>`Playing <strong>${e}</strong>...`,played_for:(e,t)=>`Played <strong>${e}</strong> for <strong class="price-item">${t}</strong> <span class="maana-icon" alt="maanas"></span> earned.`},appearance:{buttons:{backward:"Move back",forward:"Bring forward"},favourites:{imported:"Imported outfit!",importing:"Importing outfit. Please wait...",click_outfit:{delete:"Delete",goto_account:`To transfer your <strong>${GM.info.script.name}</strong> favourites to another browser, export them in the <a href="/user/account" style="text-decoration: underline;">my account</a> page.`,saved_locally:`Take note that this outfit was saved in <strong>${GM.info.script.name}</strong>' settings and was not sent to Eldarya's servers.`,wear:"Wear"},save_outfit:{goto_account:`To transfer your <strong>${GM.info.script.name}</strong> favourites to another browser, export them in the <a href="/user/account" style="text-decoration: underline;">my account</a> page.`,placeholder:"Name...",save:"Save",saved_locally:`Take note that this outfit will only be saved within <strong>${GM.info.script.name}</strong>' settings and will not be sent to Eldarya's servers.`,title:"Save outfit"},buttons:{download:"Download PNG",export:"Export",import:"Import"}}},market:{add_to_wishlist:{added_to_wishlist:(e,t)=>`Added <strong>${e}</strong> for <strong class="price-item">${t}</strong> <span class="maana-icon" alt="maanas"></span> to the wishlist.`,invalid_price:"This is not a valid price.",save:"Save",text:"How many maanas do you wish to offer to acquire this item?",title:"Add to wishlist"},auctions:{buy_now_price:"Buy now price :",current_price:"Current price :",delete:"Delete",purchase_history:"Purchase history",sales_history:"Sales history",date_time_format:new Intl.DateTimeFormat("en-GB",{minute:"2-digit",hour:"2-digit",day:"numeric",month:"long",year:"numeric"})},change_price:{changed_price:(e,t)=>`Changed <strong>${e}</strong>'s price for <strong class="price-item">${t}</strong> <span class="maana-icon" alt="maanas"></span>.`,invalid_price:"This is not a valid price.",save:"Save",text:"How many maanas do you wish to offer to acquire this item?",title:"Change price"},wishlist:{assistance:"On this page, you can organize your wishlist and check the status of your wished items.",actions:"Actions",change_price:"Change price",delete_tooltip:"Remove from wishlist",delete:"Delete",icon:"Icon",name:"Name",price:"Price",reset_tooltip:"Reset the error status",reset:"Reset",status:"Status",title:"Wishlist"}},account:{debug_tooltip:"Enables or disables logging.",debug:"Debug",enhancements:"Enhancements",explorations:"Explorations",export:"Export settings",import:"Import settings",imported:"Imported settings!",market:"Market",minigames:"Minigames"},pet:{auto_explore:"Highlight"},profile:{export_outfit:"Export outfit",download_outfit:"Download PNG"}};Object.freeze(e);const t={home:{forum:"Forum",script_loaded:`${GM.info.script.name} v${GM.info.script.version} chargé.`,takeover:"Takeover"},takeover:{bought:(e,t)=>`Acheté <strong>${e}</strong> pour <strong class="price-item">${t}</strong> <span class="maana-icon" alt="maanas"></span>.`,disabled:"Takeover désactivé.",enabled:"Takeover activé. Évite d'intéragir avec cet onglet."},carousel:{beemoov_annoyances:{title:"Beemoov Annoyances",subtitle:"Bloque certains irritants d'Eldarya."},download_face:{title:"Télécharge le visage de ta gardienne!",subtitle:"Clique ici pour télécharger le visage de ta gardienne."},download_guardian:{title:"Télécharge ta gardienne!",subtitle:"Clique ici pour télécharger ta gardienne."},eldarya_enhancements:{title:`${GM.info.script.name} v${GM.info.script.version}`,subtitle:"Améliore l'expérience utilisateur d'Eldarya."},takeover:{disable_takeover:"Désactive le takeover",enable_takeover:"Active le takeover",subtitle:"Laisse cet onglet performer des actions automatiques.",title:"Takeover"}},minigames:{playing:e=>`Joue à <strong>${e}</strong>...`,played_for:(e,t)=>`A joué à <strong>${e}</strong> pour <strong class="price-item">${t}</strong> <span class="maana-icon" alt="maanas"></span> gagnés.`},appearance:{buttons:{backward:"Vers l'arrière",forward:"Vers l'avant"},favourites:{imported:"Importation réussie!",importing:"Importation en cours...",click_outfit:{delete:"Supprimer",goto_account:`Pour transférer tes favoris d'<strong>${GM.info.script.name}</strong> vers un autre navigateur, exporte-les à partir de la page <a href="/user/account" style="text-decoration: underline;">mon compte</a>.`,saved_locally:`Prends note que cette tenue a été sauvegardée localement dans les paramètres d'<strong>${GM.info.script.name}</strong> et n'a pas été envoyée aux serveurs d'Eldarya.`,wear:"Porter"},save_outfit:{goto_account:`Pour transférer tes favoris d'<strong>${GM.info.script.name}</strong> vers un autre navigateur, exporte-les à partir de la page <a href="/user/account" style="text-decoration: underline;">mon compte</a>.`,placeholder:"Nom...",save:"Sauvegarder",saved_locally:`Prends note que cette tenue sera sauvegardée localement dans les paramètres d'<strong>${GM.info.script.name}</strong> et ne sera pas envoyée aux serveurs d'Eldarya.`,title:"Sauvegarder cette tenue"},buttons:{download:"Télécharger le PNG",export:"Exporter",import:"Importer"}}},market:{add_to_wishlist:{added_to_wishlist:(e,t)=>`Ajouté <strong>${e}</strong> pour <strong class="price-item">${t}</strong> <span class="maana-icon" alt="maanas"></span> à la liste de souhaits.`,invalid_price:"Ce prix n'est pas valide.",save:"Sauvegarder",text:"Combien de maanas souhaites-tu offrir pour acquérir cet item?",title:"Ajouter à la liste de souhait"},auctions:{buy_now_price:"Achat immédiat :",current_price:"Mise actuelle :",delete:"Supprimer",purchase_history:"Historique d'achat",sales_history:"Historique de vente",date_time_format:new Intl.DateTimeFormat("fr-CA",{minute:"2-digit",hour:"2-digit",day:"numeric",month:"long",year:"numeric"})},change_price:{changed_price:(e,t)=>`Changé le prix de <strong>${e}</strong> pour <strong class="price-item">${t}</strong> <span class="maana-icon" alt="maanas"></span>.`,invalid_price:"Ce prix n'est pas valide.",save:"Sauvegarder",text:"Combien de maanas souhaites-tu offrir pour acquérir cet item?",title:"Changer le prix"},wishlist:{assistance:"Sur cette page, tu peux organiser ta liste de souhaits et vérifier le statut de tes articles souhaités.",actions:"Actions",change_price:"Changer le prix",delete_tooltip:"Retirer de la liste de souhaits",delete:"Supprimer",icon:"Icône",name:"Nom",price:"Prix",reset_tooltip:"Réinitialiser l'état d'erreur",reset:"Réinitialiser",status:"Statut",title:"Liste de souhaits"}},account:{debug_tooltip:"Active ou désactive la journalisation.",debug:"Débogage",enhancements:"Améliorations",explorations:"Explorations",export:"Exporter les paramètres",import:"Importer les paramètres",imported:"Paramètres importés",market:"Marché",minigames:"Mini-jeux"},pet:{auto_explore:"Marquer"},profile:{export_outfit:"Exporter la tenue",download_outfit:"Télécharger le PNG"}};Object.freeze(t);const n=location.hostname.endsWith(".com.br")||location.hostname.endsWith(".de")||location.hostname.endsWith(".es")||location.hostname.endsWith(".hu")||location.hostname.endsWith(".it")||location.hostname.endsWith(".pl")||location.hostname.endsWith(".ru")||location.hostname.endsWith(".com")?e:location.hostname.endsWith(".fr")?t:e;var r,i,o;!function(e){e.eldarya_enhancements="eldarya_enhancements"}(r||(r={})),function(e){e.blob="blob",e.id="id",e.items="items",e.name="name"}(i||(i={})),function(e){e.favourite_outfits="favourite_outfits"}(o||(o={}));const s=new class{db;constructor(){const e=indexedDB.open(r.eldarya_enhancements,1);e.onsuccess=()=>this.db=e.result,e.onupgradeneeded=function(){const e=this.result.createObjectStore(o.favourite_outfits,{keyPath:"id",autoIncrement:!0});e.createIndex(i.blob,"blob",{unique:!1}),e.createIndex(i.items,"items",{unique:!1}),e.createIndex(i.name,"name",{unique:!1})}}async addFavouriteOutfit(e){return new Promise(((t,a)=>{if(!this.db)return void a();const n=this.db.transaction([o.favourite_outfits],"readwrite").objectStore(o.favourite_outfits).add(e);n.onsuccess=()=>t({...e,url:e.url??URL.createObjectURL(e.blob),id:Number(n.result)})}))}async clearFavouriteOutfits(){return new Promise(((e,t)=>{this.db?this.db.transaction([o.favourite_outfits],"readwrite").objectStore(o.favourite_outfits).clear().onsuccess=()=>e():t()}))}async deleteFavouriteOutfit(e){return new Promise(((t,a)=>{this.db?this.db.transaction([o.favourite_outfits],"readwrite").objectStore(o.favourite_outfits).delete(e.id).onsuccess=()=>{t(),e.url&&URL.revokeObjectURL(e.url)}:a()}))}async getFavouriteOutfit(e){return new Promise(((t,a)=>{if(!this.db)return void a();const n=this.db.transaction([o.favourite_outfits],"readonly").objectStore(o.favourite_outfits).get(e),r=n.result;n.onsuccess=()=>t({...r,url:URL.createObjectURL(r.blob)})}))}async getFavouriteOutfits(){return new Promise(((e,t)=>{if(!this.db)return void t();const a=this.db.transaction([o.favourite_outfits],"readonly").objectStore(o.favourite_outfits).getAll();a.onsuccess=()=>e(a.result.map((e=>({...e,url:URL.createObjectURL(e.blob)}))))}))}};function c(e,t="outfit"){const a=Sacha.Avatar.avatars[e];if(!a)return;const n=l(a),r="data:text/json;charset=utf-8,"+encodeURIComponent(JSON.stringify(n,void 0,2)),i=document.createElement("a");i.setAttribute("href",r),i.setAttribute("download",`${t}.json`),i.click()}function l(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}}))}function u(){c("#appearance-preview")}function d(){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 a=t[0];a&&a.text().then((async e=>{if(!e)return;const t=JSON.parse(e),a=Sacha.Avatar.avatars["#appearance-preview"];a&&await m(a,t)}))}))}async function m(e,t){$.flavrNotif(n.appearance.favourites.importing);const a=new Set;for(const e of t)availableItems[e.id]||a.add(e.type);await Promise.all(Array.from(a.values()).map((async e=>async function(e){return new Promise((t=>{document.querySelector(`#appearance-items-category-${e}`)?t():$.post(`/player/openCategory/${e}`,(e=>{$(e).hide().appendTo("#appearance-items")})).always(t)}))}(e))));const r=new Set;for(const e of t)document.querySelector(`[data-group="${e.group}"]`)&&!availableItems[e.id]&&r.add(e.group);await Promise.all(Array.from(r.values()).map((async e=>async function(e){return new Promise((t=>{document.querySelector(`#appearance-items-group-${e}`)?t():$.get(`/player/openGroup/${e}`,(e=>{$(e).hide().appendTo("#appearance-items")})).always(t)}))}(e))));const i=[];for(const e of t){const t=availableItems[e.id];t&&i.push(t)}!function(){const e=Sacha.Avatar.avatars["#appearance-preview"];if(e)for(let t=e.children.length-1;t>=0;t--){const a=e.children[t];if(!a)continue;const n=a.getItem();Sacha.Avatar.removeItemFromAllAvatars(n)&&$(`#appearance-item-${n._id}`).removeClass("selected")}}(),e.addItems(i),initializeSelectedItems(),initializeHiddenCategories();const o=document.getElementById("avatar-actions");o&&(o.style.display="initial"),$.flavrNotif(n.appearance.favourites.imported)}function p(e){const t=a(411);$.flavr({content:t.render({...e,translate:n}),onBuild:e=>{e.addClass("new-layout-popup"),e.addClass("created-outfit-popup")},buttons:{close:{text:"",style:"close",action:()=>!0},delete:{text:n.appearance.favourites.click_outfit.delete,style:"default",action:()=>(async function(e){await s.deleteFavouriteOutfit(e),await k()}(e),!0)},wear:{text:n.appearance.favourites.click_outfit.wear,style:"default",action:()=>{const t=Sacha.Avatar.avatars["#appearance-preview"];return!!t&&((async()=>{m(t,e.items)})(),!0)}}}})}function b(e,t){e.toBlob((e=>{const a=URL.createObjectURL(e),n=document.createElement("a");n.setAttribute("href",a),n.setAttribute("download",`${t}.png`),n.style.display="none",document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(a)}),"image/png",1)}function f(){const e=document.querySelector("#avatar-menu-container canvas");e?b(e,"face"):console.warn("Couldn't find the guardian's face.")}function g(){const e=document.querySelector("#home-avatar-player canvas");e?b(e,y()??"guardian"):console.warn("Couldn't find the guardian.")}function h(){const e=document.querySelector("#appearance-preview canvas");e?b(e,y()??"guardian"):console.warn("Couldn't find the guardian.")}function v(){const e=document.querySelector(".playerProfileAvatar canvas"),t=document.querySelector("#main-section .section-title");e&&t&&b(e,t.textContent?.trim()??"guardian")}function y(){return document.querySelector("#avatar-menu-container-outer>p")?.textContent??null}function w(){!function(){const e=document.getElementById("favorites-actions");if(!e||document.querySelector(".favorites-action-ee"))return;const t=a(779),r={id:"import-outfit",text:n.appearance.favourites.buttons.import},i={id:"export-outfit",text:n.appearance.favourites.buttons.export},o={id:"download-outfit",text:n.appearance.favourites.buttons.download};e.insertAdjacentHTML("beforeend",t.render(r)+t.render(i)+t.render(o)),document.getElementById(r.id)?.addEventListener("click",d),document.getElementById(i.id)?.addEventListener("click",u),document.getElementById(o.id)?.addEventListener("click",h)}(),k()}async function k(){const e=document.querySelector("#all-outfit-thumbs .mCSB_container");if(!e)return;const t=a(275),r=await s.getFavouriteOutfits();document.querySelector("#ee-outfit-thumbs")?.remove(),e.insertAdjacentHTML("beforeend",t.render({outfits:r})),document.querySelector(".ee-available-slot")?.addEventListener("click",(()=>{!async function(){const e=await async function(){const e=a(391);return new Promise((t=>$.flavr({content:e.render({translate:n}),onBuild:e=>{e.addClass("new-layout-popup"),e.addClass("created-outfit-popup");const t=document.querySelector('[rel="btn-save"]');t&&(document.querySelector("#choose-name")?.addEventListener("keyup",(e=>{"Enter"===e.key&&t.click(),document.querySelector("#choose-name")?.value?t.classList.remove("disabled"):t.classList.add("disabled")})),t.classList.add("nl-button","nl-button-lg","disabled"))},buttons:{close:{text:"",style:"close",action:()=>(t(null),!0)},save:{text:n.appearance.favourites.save_outfit.save,style:"default",action:()=>{const e=document.querySelector("#choose-name")?.value;if(!e)return!1;const a=Sacha.Avatar.avatars["#appearance-preview"];return!!a&&(async function(e,t,a){const n=await new Promise((e=>{document.querySelector("#appearance-preview canvas")?.toBlob((t=>e(t)),"image/png",1)}));a({...await s.addFavouriteOutfit({items:t,name:e,blob:n}),url:URL.createObjectURL(n)})}(e,l(a),t),!0)}}}})))}();e&&await k()}()}));for(const e of document.querySelectorAll(".ee-outfit-thumb"))e.addEventListener("click",(()=>{const t=r.find((t=>t.id===Number(e.dataset.arrayIndex)));t&&p(t)}))}const x=new class{categories={};groups={};items={};availableItems;getCategories(){return Object.values(this.categories)}getCategory(e){return this.categories[e]}getCategoryGroups(e){return Object.values(this.groups).filter((t=>t.categoryid===e))}getGroup(e){return this.groups[e]}getGroups(){return Object.values(this.groups)}getItem(e){return this.items[e]}getItems(e){return Object.values(this.items).filter((t=>t.group===e))}setCategory(e){this.categories[e.categoryid]=e}setGroup(e){this.groups[e.group]=e}setItem(e){this.items[e.itemid]=e}};function S(e){const t=document.querySelector("#appearance-items");if(!t)return;const a=document.querySelector(`#appearance-items-category-${e}`);a?"favorites"===e?w():_(t,a):new MutationObserver(((a,n)=>{const r=document.querySelector(`#appearance-items-category-${e}`);r&&(n.disconnect(),"favorites"===e?w():_(t,r))})).observe(t,{childList:!0})}async function _(e,t){await new Promise((e=>setTimeout(e,220)));const{category:r,categoryid:i,categoryname:o}=t.dataset;if(!r||!i||!o)return;x.setCategory({category:r,categoryid:Number(i),categoryname:o}),t.classList.remove("active"),t.style.display="none";const s=a(281);document.getElementById("ee-category")?.remove(),e.insertAdjacentHTML("beforeend",s.render({category:r,categoryid:i,translate:n}));const c=document.querySelector("#ee-items");if(c){!function(e){const t=x.getCategories().find((t=>t.category===e))?.categoryid;if(!t)return;const n=x.getCategoryGroups(t),r=a(604),i=a(188);document.querySelector("#appearance-items")?.insertAdjacentHTML("beforeend",n.map((e=>i.render({...e,items:x.getItems(e.group).map((e=>r.render(e))).join("\n")}))).join("\n"))}(r);for(const a of t.querySelectorAll("li.appearance-item-group")){const{group:t}=a.dataset;if(x.setGroup({category:r,categoryid:Number(i),group:Number(t)}),!t)continue;document.querySelector(`#appearance-items-group-${t}`)||await $.get("/player/openGroup/"+t,(t=>e.insertAdjacentHTML("beforeend",t)));const n=document.querySelector(`#appearance-items-group-${t}`);if(!n)continue;n.classList.remove("active");const o=n.querySelector("script");if(o&&setTimeout(o.innerHTML,0),!document.querySelector(`#wardrobe-menu li[data-category="${r}"].active`))break;c.insertAdjacentHTML("beforeend",Array.from(n.querySelectorAll("li.appearance-item")).map((e=>{e.dataset.category=r,e.dataset.categoryid=i,e.dataset.group=t;const a=e.querySelector("img")?.src;return a?(x.setItem({group:Number(t),icon:a,itemid:Number(e.dataset.itemid),name:e.dataset.name??"",rarity:e.dataset.rarity??"",rarityname:e.dataset.rarityname??""}),e.outerHTML):e.outerHTML})).join("\n")),initializeSelectedItems(),initializeHiddenCategories(),x.availableItems=availableItems}!function(){const e=document.querySelectorAll("#appearance-items .appearance-items-category:not(.active):not([data-categoryname]), #appearance-items script");for(const t of e)t.remove()}()}}function E(e,t){e=e||[],"string"==typeof(t=t||{})&&(t={type:t});try{return new Blob(e,t)}catch(r){if("TypeError"!==r.name)throw r;for(var a=new("undefined"!=typeof BlobBuilder?BlobBuilder:"undefined"!=typeof MSBlobBuilder?MSBlobBuilder:"undefined"!=typeof MozBlobBuilder?MozBlobBuilder:WebKitBlobBuilder),n=0;n<e.length;n+=1)a.append(e[n]);return a.getBlob(t.type)}}function L(e){return function(e){return new Promise((function(t,a){var n=new FileReader,r="function"==typeof n.readAsBinaryString;n.onloadend=function(){var e=n.result||"";if(r)return t(e);t(function(e){for(var t="",a=new Uint8Array(e),n=a.byteLength,r=-1;++r<n;)t+=String.fromCharCode(a[r]);return t}(e))},n.onerror=a,r?n.readAsBinaryString(e):n.readAsArrayBuffer(e)}))}(e).then(btoa)}function I(e){for(var t=e.length,a=new ArrayBuffer(t),n=new Uint8Array(a),r=-1;++r<t;)n[r]=e.charCodeAt(r);return a}var q,T,A,M,B,N,P,C,j;!function(e){e.autoExploreLocations="autoExploreLocations",e.debug="debug",e.explorations="explorations",e.market="market",e.minigames="minigames",e.purchases="purchases",e.sales="sales",e.version="version",e.wishlist="wishlist"}(q||(q={}));class D{static localStorage=localStorage;constructor(){}static get autoExploreLocations(){return this.getItem(q.autoExploreLocations,[])}static set autoExploreLocations(e){this.setItem(q.autoExploreLocations,e)}static get debug(){return this.getItem(q.debug,!1)}static set debug(e){this.setItem(q.debug,e)}static get explorations(){return this.getItem(q.explorations,!1)}static set explorations(e){this.setItem(q.explorations,e)}static get market(){return this.getItem(q.market,!1)}static set market(e){this.setItem(q.market,e)}static get minigames(){return this.getItem(q.minigames,!1)}static set minigames(e){this.setItem(q.minigames,e)}static get purchases(){return this.getItem(q.purchases,[])}static set purchases(e){this.setItem(q.purchases,e)}static get sales(){return this.getItem(q.sales,[])}static set sales(e){this.setItem(q.sales,e)}static async getSettings(){return{autoExploreLocations:this.autoExploreLocations,debug:this.debug,explorations:this.explorations,favourites:await Promise.all((await s.getFavouriteOutfits()).map((async e=>({name:e.name,items:e.items,base64:await L(e.blob)})))),market:this.market,minigames:this.minigames,version:this.version,wishlist:this.wishlist}}static async setSettings(e){this.autoExploreLocations=e.autoExploreLocations,this.debug=e.debug,this.explorations=e.explorations,this.market=e.market,this.minigames=e.minigames,this.version=e.version,this.wishlist=e.wishlist,await s.clearFavouriteOutfits();for(const t of e.favourites.map((e=>{return{blob:(t=e.base64,n=[I(atob(t))],a?E(n,{type:a}):E(n)),items:e.items,name:e.name};var t,a,n})))s.addFavouriteOutfit(t)}static get version(){return this.getItem(q.version,"")}static set version(e){this.setItem(q.version,e)}static get wishlist(){return this.getItem(q.wishlist,[])}static set wishlist(e){this.setItem(q.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 O{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"}(T||(T={}));class R{static sessionStorage=sessionStorage;constructor(){}static get action(){return this.getItem(T.action,null)}static set action(e){this.setItem(T.action,e)}static get explorationsDone(){return this.getItem(T.explorationsDone,!1)}static set explorationsDone(e){this.setItem(T.explorationsDone,e)}static get meta(){return this.getItem(T.meta,null)}static set meta(e){this.setItem(T.meta,e)}static get minigamesDone(){return this.getItem(T.minigamesDone,!1)}static set minigamesDone(e){this.setItem(T.minigamesDone,e)}static get selectedLocation(){return this.getItem(T.selectedLocation,null)}static set selectedLocation(e){this.setItem(T.selectedLocation,e)}static get takeover(){return this.getItem(T.takeover,!1)}static set takeover(e){this.setItem(T.takeover,e)}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.sessionStorage.getItem(e)??JSON.stringify(t))??t}static setItem(e,t){this.sessionStorage.setItem(e,JSON.stringify(t))}}function H(){const e=document.getElementById("header-right");if(!e)return;const t=e.querySelector("#header-takeover");t?t.remove():function(){const e=document.getElementById("header-profile")?.firstChild;if(e?.textContent){const t=document.createElement("a");t.href="/player/profile",t.style.color="var(--text-color)",t.style.fontFamily='"Alegreya Sans", sans-serif',t.style.fontWeight="unset",t.textContent=e.textContent.trim();const a=document.createElement("p");a.insertAdjacentElement("beforeend",t),e.replaceWith(a)}const t=document.querySelector("#avatar-menu-container-outer>p");t?.textContent&&(t.innerHTML=`<a href="/player/profile" style="color: #FFFFFF; font-size: 23px; font-weight: 900; text-transform: uppercase;">${t.textContent.trim()}</a>`),document.querySelector("#avatar-menu-container>canvas")?.addEventListener("click",(()=>pageLoad("/player/appearance")))}();const r=a(810);e.insertAdjacentHTML("afterbegin",r.render({takeover:R.takeover,translate:n})),e.querySelector("#header-takeover")?.addEventListener("click",se)}function G(e){const t=e.querySelector(".abstract-name")?.innerText,a=e.querySelector(".abstract-icon img")?.src,n=e.querySelector(".price-item[data-bids]")?.dataset,r=e.querySelector(".price-item:not([data-bids])")?.dataset;return a&&t?{...e.dataset,icon:a,name:t,buyNowPrice:r,currentPrice:n,date:new Date}:null}async function F(e){return new Promise((t=>{const a=setInterval((()=>{const n=document.querySelector(e);if(!n)return;clearInterval(a);const r=document.createEvent("MouseEvent");r.initEvent("mouseover"),n.dispatchEvent(r),setTimeout((()=>{n.click(),t(n)}),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"}(A||(A={})),function(e){e.all="",e.food="food",e.alchemy="alchemy",e.utility="utility",e.tame="tame"}(M||(M={})),function(e){e.all="",e[e.food=1]="food",e.alchemy="Consumable",e[e.utility=3]="utility",e[e.tame=4]="tame"}(B||(B={})),function(e){e.any="",e[e.light=1]="light",e[e.obsidian=2]="obsidian",e[e.absynthe=3]="absynthe",e[e.shadow=4]="shadow"}(N||(N={})),function(e){e.all="",e.common="common",e.rare="rare",e.Epic="epic",e.legendary="legendary",e.event="event"}(P||(P={})),function(e){e.All="",e.Bag="Bag",e.Consumable="Consumable",e.EggItem="EggItem",e.PlayerWearableItem="PlayerWearableItem",e.QuestItem="QuestItem"}(C||(C={})),function(e){e.daily="daily",e.minigames="minigames",e.explorations="explorations",e.auctions="auctions",e.buy="buy",e.wait="wait"}(j||(j={}));class W{}const U=new class extends W{key=j.buy;get currentMaana(){return Number(document.querySelector("#currency-maana")?.dataset.maana)}condition(){return D.market&&Boolean(D.wishlist.length)}async perform(){if("/marketplace"!==location.pathname)return await F(".main-menu-marketplace a"),!0;const e=a(369);for(const t of D.wishlist){if(t.error){O.warn(`Skipped "${t.name}"`,t);continue}O.info(`Searching for "${t.name}"`,t);let a=8;e:for(let r=1;8===a;r++){const i=await this.search(t,r);a=i.length,O.log(`Found ${a} results`,i);const o=i.filter((e=>e.icon===t.icon&&e.buyNowPrice&&Number(e.buyNowPrice.price)<=t.price&&Number(e.buyNowPrice.price)<=this.currentMaana));for(const t of o){if(!await this.buy(t))break e;D.purchases=[t,...D.purchases.filter((e=>e.itemid!==t.itemid))],O.info(`Bought "${t.name}" for ${Number(t.buyNowPrice?.price)} maanas.`,t),$.flavrNotif(e.render({...t,message:n.takeover.bought(t.name,Number(t.buyNowPrice?.price))}))}}}return!1}async buy(e){const t=await async function(e){return new Promise((t=>{$.post("/marketplace/buy",{id:e},(e=>{R.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 a=document.querySelector("#filter-itemName");a&&(a.value=e.name);const n=document.querySelector(".marketplace-search-items");return n?(n.innerHTML=await async function(e){return e={type:C.All,bodyLocation:A.All,category:B.all,rarity:P.all,price:"",guard:N.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(n.querySelectorAll(".marketplace-search-item")).map(G).filter((e=>null!==e))):[]}setError(e,t){const a=D.wishlist,n=a.findIndex((t=>t.wearableitemid===e)),r=a[n];r&&(r.error=t,D.wishlist=[...a.slice(void 0,n),r,...a.slice(n+1,void 0)])}},z=new class{key=j.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 F(".first-connexion .flavr-button.default"),ce(),1))}};async function J(e){return new Promise((t=>{$.post("/pet/changeRegion",{newRegionId:e},(e=>{R.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 K,Q,V;!function(e){e.error="error",e.success="success"}(K||(K={})),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"}(Q||(Q={})),function(e){e[e.idle=0]="idle",e[e.result=1]="result",e[e.capture=2]="capture",e[e.pending=3]="pending"}(V||(V={}));const Y=new class extends W{key=j.explorations;get globals(){return{currentRegion,pendingTreasureHuntLocation,timeLeftExploration}}condition(){return D.explorations&&!R.explorationsDone&&!!D.autoExploreLocations.length}async perform(){if("/pet"!==location.pathname)return await F(".main-menu-pet a"),!0;switch(this.getExplorationStatus()){case V.idle:return(await this.startExploration()).selected||(R.explorationsDone=!0),!1;case V.pending:return await this.waitExploration()&&this.perform();case V.result:return await this.endExploration(),this.perform();case V.capture:return await this.endCapture(),this.perform();default:return!1}}async clickExplore(){return F("#explore-button")}async clickLocation(e){return F(`.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())),R.selectedLocation=null,location.reload(),null)}async clickSeason(){return F("#crystal-images-container")}async endCapture(){try{new Audio("/static/event/2021/music/sounds/mission-complete.mp3").play()}catch(e){}await F("#open-capture-interface"),await F("#capture-button"),await F("#close-result")}async endExploration(){return F("#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")?V.capture:document.querySelector("#pending-map-location-data-outer.active")||document.querySelector("#map-container.pending")?V.pending:document.querySelector("#treasure-hunt-result-overlay.active")?V.result:V.idle}getLowestEnergyLocation(){return D.autoExploreLocations.reduce(((e,t)=>Number(t.location.energyRequired)<Number(e.location.energyRequired)?t:e))}getSelectedLocation(){let e=R.selectedLocation;return e||(e=this.selectLocation(),R.selectedLocation=e),e}selectLocation(){const e=D.autoExploreLocations.filter((e=>Number(e.location.energyRequired)<=petEnergy)),t=this.getLowestEnergyLocation(),a=e.filter((e=>petEnergy-Number(e.location.energyRequired)>=Number(t.location.energyRequired)));if(a.length)return a[Math.floor(Math.random()*a.length)]??null;const n=e.filter((e=>Number(e.location.energyRequired)===petEnergy));return n.length?n[Math.floor(Math.random()*n.length)]??null:e[Math.floor(Math.random()*e.length)]??null}async startExploration(){const e=this.getSelectedLocation();return e?(O.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(),R.selectedLocation=null,{exploring:!0,selected:e})):{exploring:!1,selected:e}}async waitExploration(e){document.querySelector(`.minimap[data-mapid="${e?.region.id??currentRegion.id}"]`)?.click();let t=3*Q.second;if(e)t+=e.location.timeToExplore*Q.minute;else if(timeLeftExploration&&timeLeftExploration>0)t+=timeLeftExploration*Q.second;else if(!pendingTreasureHuntLocation&&document.querySelector("#map-container.pending")){const e=await async function(){return new Promise((e=>{$.post("/pet/explorationResults",(t=>{R.meta=t.meta,e(t),"success"===t.result||$.flavrNotif(t.data)}))}))}();return e.result===K.success&&(!!e.data.results.find((e=>"capture"===e.type))&&(await async function(){return new Promise((e=>{$.post("/pet/capture/end",(t=>{R.meta=t.meta,e(t),"success"===t.result||$.flavrNotif(t.data)}))}))}(),O.error("Reloading because the exploration is in another region.",this.globals),await new Promise((e=>setTimeout(e,Q.minute))),location.reload(),!0))}return!(t>10*Q.minute||(O.log(`Waiting for the exploration to end in ${Math.ceil(t/Q.second)} seconds...`,this.globals),await new Promise((e=>setTimeout(e,t))),await J(Number(e?.region.id??currentRegion.id)),this.getExplorationStatus()===V.pending&&timeLeftExploration&&timeLeftExploration<0&&(O.info("Reloading because the timer is desynchronised.",this.globals),await new Promise((e=>setTimeout(e,Q.second))),location.reload()),0))}},X={name:"Flappy",scoreMin:180,scoreMax:200,delayMin:6e4,delayMax:7e4,buttonSelector:'.minigame-start [href="/minigames/bubbltemple"] .nl-button',icon:"/static/img/new-layout/minigames/icon_bubbletemple.png"},Z={name:"Hatchlings",scoreMin:18,scoreMax:20,delayMin:3e4,delayMax:3e4,buttonSelector:'.minigame-start [href="/minigames/cocooninpick"] .nl-button',icon:"/static/img/new-layout/minigames/icon_coconinpick.png"},ee={name:"Peggle",scoreMin:9,scoreMax:10,delayMin:1e4,delayMax:2e4,buttonSelector:'.minigame-start [href="/minigames/gembomb"] .nl-button',icon:"/static/img/new-layout/minigames/icon_gembomb.png"};async function te(e){await new Promise((e=>{const t=setInterval((()=>{const a=document.querySelectorAll(".minigames-rules .flavr-button");if(a.length){clearInterval(t);for(const e of a)e.classList.add("disabled");e(!0)}}),250)}));const t=await async function(e){return new Promise(((t,a)=>{"undefined"!=typeof Recaptcha?Recaptcha.execute(`minigameStart${e.name}`,(n=>{ne(e,n).then(t).catch(a)})):ne(e).then(t).catch(a)}))}(e),r=a(369);$.flavrNotif(r.render({...e,message:n.minigames.playing(e.name)}));const i=t.data,o=ae(e.scoreMin,e.scoreMax),s=function(e,t){e=e.toString(),t=t.toString();let a="";for(let n=0;n<e.length;++n){let r=e[n];for(let e=0;e<t.length;++e)r=String.fromCharCode(r.charCodeAt(0)^t.charCodeAt(e));a+=r}return encodeURIComponent(a)}(i,o.toString());await new Promise((t=>setTimeout(t,ae(e.delayMin,e.delayMax)))),await re(e,i,o),await new Promise((e=>setTimeout(e,ae(1e3,3e3)))),await async function(e,t,a){return new Promise((n=>{"undefined"!=typeof Recaptcha?Recaptcha.execute("minigameSave"+a,(r=>{ie(e,t,a,r).then(n)})):ie(e,t,a).then(n)}))}(s,o,e.name.toLowerCase()),await new Promise((e=>setTimeout(e,ae(1e3,3e3))))}function ae(e,t){return Math.floor(Math.random()*(t-e+1)+e)}async function ne(e,t){return new Promise(((a,n)=>{$.ajax({url:"/minigames/ajax_startGame",type:"post",dataType:"json",data:t?{game:e.name.toLowerCase(),recaptchaToken:t}:{game:e.name.toLowerCase()},success:e=>{a(e)},error:()=>{n()}})}))}async function re(e,t,r){return new Promise((i=>{$.post("/minigames/ajax_getPrizes",{game:e.name.toLowerCase(),score:r},(t=>{if(i(t),"success"===t.result){const r=a(369);$.flavrNotif(r.render({...e,message:n.minigames.played_for(e.name,t.data.maana)}))}else $.flavrNotif(t.data)}),"json").fail((()=>setTimeout((()=>{i(re(e,t,r))}),ae(1e3,3e3))))}))}async function ie(e,t,a,n){return new Promise((r=>{const i=decodeURIComponent(e);$.ajax({type:"post",url:"/minigames/ajax_saveScore",data:n?{token:i,score:t,game:a,recaptchaToken:n}:{token:i,score:t,game:a},success:()=>{r()},error:()=>setTimeout((()=>{r(ie(e,t,a))}),ae(1e3,3e3))})}))}function oe(){R.takeover&&le()}function se(){ce(),R.takeover=!R.takeover,H(),R.takeover,$.flavrNotif(n.takeover.enabled),le()}function ce(){R.action=null,R.explorationsDone=!1,R.minigamesDone=!1,R.selectedLocation=null,R.wishlist=[]}async function le(){if(!R.takeover)return;z.condition()&&await z.perform();const e=ue.find((e=>e.key===R.action));return e?(O.info("Action:",e.key),e.condition()&&await e.perform()?void 0:(de(),void le())):(de(),void le())}const ue=[new class{key=j.minigames;condition(){return D.minigames&&!R.minigamesDone}async perform(){switch(location.pathname){case"/minigames":{const e=this.openMinigame(ee)||this.openMinigame(X)||this.openMinigame(Z);return e||(R.minigamesDone=!0,document.querySelector('.minigames-rules [rel="btn-cancel"]')?.click()),e}case"/minigames/gembomb":await async function(){return te(ee)}();break;case"/minigames/bubbltemple":await async function(){return te(X)}();break;case"/minigames/cocooninpick":await async function(){return te(Z)}();break;default:return await F(".main-menu-minigames a"),!0}return await F(".main-menu-minigames a"),!0}openMinigame(e){const t=document.querySelector(e.buttonSelector);return!!t&&(t.click(),!0)}},Y,U,new class extends W{key=j.wait;condition(){return!0}async perform(){return O.log("Waiting for 10 minutes..."),new Promise((e=>setTimeout((()=>{e(!1)}),6e5)))}}];function de(){const e=ue.findIndex((e=>e.key===R.action))+1;return R.action=ue[e>=ue.length?0:e].key}function me(){if("/marketplace/auctions"!==location.pathname)return;const e=document.querySelector("#marketplace-active-auctions");if(!e)return;const t=document.querySelector(".marketplace-main-container #layout-2col");t&&(t.style.overflowX="visible"),pe(e)}function pe(e){e.querySelector("style")?.remove(),e.querySelector("#purchase-history")?.remove(),e.querySelector("#sale-history")?.remove();const t=a(266),r={purchases:D.purchases.map((e=>({...e,date:n.market.auctions.date_time_format.format(new Date(e.date))}))),sales:D.sales.map((e=>({...e,date:n.market.auctions.date_time_format.format(new Date(e.date))})))};e.insertAdjacentHTML("beforeend",t.render({...r,translate:n}));for(const t of document.querySelectorAll("#purchase-history .marketplace-auctions-item")){const a=t.dataset.itemid;t.querySelector(".delete-button")?.addEventListener("click",(()=>{D.purchases=D.purchases.filter((e=>e.itemid!==a)),pe(e)}))}for(const t of document.querySelectorAll("#sale-history .marketplace-sales-item")){const a=t.querySelector(".abstract-icon img")?.src;t.querySelector(".delete-button")?.addEventListener("click",(()=>{D.sales=D.sales.filter((e=>e.icon!==a)),pe(e)}))}}const be={backgroundImage:"https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_beemoov_annoyances.png",h4:n.carousel.beemoov_annoyances.title,href:"https://gitlab.com/NatoBoram/Beemoov-Annoyances",id:"carousel-beemoov-annoyances",p:n.carousel.beemoov_annoyances.subtitle},fe={backgroundImage:"https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_download_face.png",id:"carousel-download-face",h4:n.carousel.download_face.title,p:n.carousel.download_face.subtitle},ge={backgroundImage:"https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_download_guardian.png",id:"carousel-download-guardian",h4:n.carousel.download_guardian.title,p:n.carousel.download_guardian.subtitle},he={backgroundImage:"https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_eldarya_enhancements.png",h4:n.carousel.eldarya_enhancements.title,href:GM.info.script.namespace,id:"carousel-eldarya-enhancements",p:n.carousel.eldarya_enhancements.subtitle},ve={backgroundImage:"https://gitlab.com/NatoBoram/eldarya-enhancements/-/raw/master/images/carousel_takeover.png",id:"carousel-takeover",h4:n.carousel.takeover.title,p:n.carousel.takeover.subtitle};function ye(e){const t=e.querySelector("h4");t&&(t.innerText=R.takeover?n.carousel.takeover.disable_takeover:n.carousel.takeover.enable_takeover)}let we,ke;function xe(){for(const e of document.querySelectorAll(".marketplace-abstract"))e.addEventListener("click",(()=>{new MutationObserver(((t,a)=>{const n=G(e);n&&Se(n,a)})).observe(document.getElementById("marketplace-zoom"),{childList:!0})}))}function Se(e,t){const r=document.querySelector("#marketplace-itemDetail");if(!r)return;t?.disconnect(),function(e){document.querySelector(".marketplace-itemDetail-bid-prepare")?.addEventListener("click",(()=>{Ee(e)})),document.querySelector(".marketplace-itemDetail-buy")?.addEventListener("click",(()=>{Ee(e)}))}(e),document.getElementById("marketplace-itemDetail-info-autobuy")?.remove();const i=a(314);r.insertAdjacentHTML("beforeend",i.render({translate:n})),r.querySelector("#marketplace-itemDetail-info-autobuy")?.addEventListener("click",(()=>{!function(e){const t=a(823);$.flavr({content:t.render({translate:n}),buttons:{close:{style:"close"},save:{action:()=>_e(e)}},dialog:"prompt",prompt:{value:""},onBuild:t=>{t.addClass("new-layout-popup"),document.querySelector(".flavr-prompt")?.addEventListener("keyup",(({key:t})=>{"Enter"===t&&_e(e)}))}})}(e)}))}function _e(e){const t=Number(document.querySelector(".flavr-prompt")?.value.trim());if(!t||t<=0)return $.flavrNotif(n.market.add_to_wishlist.invalid_price),!1;const r=D.wishlist.filter((t=>t.icon!==e.icon)),i={...e,price:t};r.push(i),D.wishlist=r;const o=a(369);return $.flavrNotif(o.render({...i,message:n.market.add_to_wishlist.added_to_wishlist(i.name,i.price)})),!0}function Ee(e){D.purchases=[e,...D.purchases.filter((t=>t.itemid!==e.itemid))]}function Le(){if(ke?.disconnect(),ke=null,"/pet"!==location.pathname)return;const e=document.querySelector(".page-main-container");e&&(ke=new MutationObserver(Le),ke.observe(e,{attributes:!0}),function(){const e=D.autoExploreLocations;for(const t of document.querySelectorAll(".map-location[data-id]")){const a=Number(t.getAttribute("data-id"));a&&(Ae(e,t),t.addEventListener("click",(()=>{new MutationObserver(((e,t)=>{Ie(a,t)})).observe(document.getElementById("map-location-preview"),{attributes:!0})})))}}())}function Ie(e,t){const r=document.querySelector("#buttons-container");if(!r)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"))};r.querySelector("#auto-explore-button")?.remove();const o=a(875);r.insertAdjacentHTML("beforeend",o.render({...i,translate:n})),r.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 qe(e.regionId,e.locationId);if(!t)return;const a=D.autoExploreLocations;a.push(t),D.autoExploreLocations=a,Ie(e.locationId)})(i).then(Te)})),async function(e){const t=await qe(e.regionId,e.locationId);t&&petEnergy<Number(t.location.energyRequired)&&document.getElementById("explore-button")?.classList.add("disabled")}(i)}async function qe(e,t){const a=await async function(e){if(e.toString()===currentRegion.id)return currentRegion;const t=await J(e);return t.result===K.success?t.data.currentRegion:null}(e);if(!a)return null;const n=a.locations.find((e=>e.id===t.toString()));return n?{location:n,region:a}:null}function Te(){const e=D.autoExploreLocations;for(const t of document.querySelectorAll(".map-location[data-id]"))Ae(e,t)}function Ae(e,t){const a=t.getAttribute("data-id");a&&(t.style.backgroundImage=e.some((e=>e.location.id===a))?"url(/static/img/new-layout/pet/icons/picto_map_explo.png)":"url(/static/img/new-layout/pet/icons/picto_map.png)")}function Me(){const e=document.querySelector("#main-section .section-title"),t=Object.keys(Sacha.Avatar.avatars).filter((e=>e.startsWith("#playerProfileAvatar")));for(const a of t)c(a,e?.textContent?.trim())}function $e(e,t,a){e.addEventListener("click",(()=>{const e=document.querySelector("#marketplace-saleDetail-currentPrice")?.value,n=document.querySelector("#marketplace-saleDetail-buyNowPrice")?.value;e&&n&&(D.sales=[{...t,currentPrice:Number(e),buyNowPrice:Number(n),icon:a,date:new Date},...D.sales])}))}async function Be(){const e=document.querySelector("#account-right div");if(!e||e.querySelector(".account-ee-bloc"))return;const t=a(278);e.insertAdjacentHTML("beforeend",t.render({...await D.getSettings(),translate:n})),document.getElementById("ee-debug-enabled")?.addEventListener("click",(()=>{D.debug=!D.debug,Ne()})),document.getElementById("ee-minigames-enabled")?.addEventListener("click",(()=>{D.minigames=!D.minigames,Ne()})),document.getElementById("ee-explorations-enabled")?.addEventListener("click",(()=>{D.explorations=!D.explorations,Ne()})),document.getElementById("ee-market-enabled")?.addEventListener("click",(()=>{D.market=!D.market,Ne()})),document.getElementById("ee-import")?.addEventListener("click",Pe),document.getElementById("ee-export")?.addEventListener("click",(()=>{!async function(){const e="data:text/json;charset=utf-8,"+encodeURIComponent(JSON.stringify(await D.getSettings(),null,2)),t=document.createElement("a");t.setAttribute("href",e),t.setAttribute("download",`${y()??"eldarya-enhancements"}-settings.json`),t.click()}()}))}function Ne(){document.querySelector(".account-ee-bloc")?.remove(),Be()}function Pe(){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 a=t[0];a&&a.text().then((async e=>{e&&(await D.setSettings(JSON.parse(e)),Ne(),$.flavrNotif(n.account.imported))}))}))}function Ce(){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=a(520);e.insertAdjacentHTML("beforeend",t.render({translate:n}));const r=e.querySelector("#wishlist-button");r?.addEventListener("click",(()=>{je(r)}))}function je(e){const t=document.querySelector(".marketplace-assistance");t&&(t.textContent=n.market.wishlist.assistance),document.querySelector("#marketplace-menu .active")?.classList.remove("active"),e.classList.add("active");const r=document.getElementById("marketplace-filters");r&&(r.innerHTML="");const i=a(47),o=document.querySelector(".marketplace-container")??document.getElementById("marketplace-active-auctions")??document.getElementById("marketplace-itemsForSale");if(!o)return;const s={wishlist:D.wishlist};o.innerHTML=i.render({...s,translate:n});for(const t of o.querySelectorAll("tr")){const a=t.dataset.wearableitemid;if(!a)continue;const n=t.querySelector(".reset-item-status");n&&n.addEventListener("click",(()=>{De(a),je(e)}));const r=t.querySelector(".delete-wishlist-item");r&&r.addEventListener("click",(()=>{Oe(a),je(e)}));const i=t.querySelector(".edit-price");i&&i.addEventListener("click",(()=>{Re(a).then((()=>{je(e)}))}))}}function De(e){const t=D.wishlist,a=t.findIndex((t=>t.wearableitemid===e)),n=t[a];n&&(delete n.error,D.wishlist=[...t.slice(void 0,a),n,...t.slice(a+1,void 0)])}function Oe(e){D.wishlist=D.wishlist.filter((t=>t.wearableitemid!==e))}async function Re(e){const t=a(560),r=D.wishlist,i=r.findIndex((t=>t.wearableitemid===e)),o=r[i];if(o)return new Promise((a=>{$.flavr({content:t.render({translate:n}),dialog:"prompt",prompt:{value:o.price.toString()},buttons:{close:{style:"close",action:()=>(a(),!0)},save:{action:()=>He(e,a)}},onBuild:t=>{t.addClass("new-layout-popup"),document.querySelector(".flavr-prompt")?.addEventListener("keyup",(({key:t})=>{"Enter"===t&&He(e,a)}))}})}))}function He(e,t){const r=D.wishlist,i=r.findIndex((t=>t.wearableitemid===e)),o=r[i];if(!o)return!1;const s=Number(document.querySelector(".flavr-prompt")?.value.trim());if(!s||s<=0)return $.flavrNotif(n.market.change_price.invalid_price),!1;o.price=s,D.wishlist=[...r.slice(void 0,i),o,...r.slice(i+1,void 0)];const c=a(369);return $.flavrNotif(c.render({...o,message:n.market.change_price.changed_price(o.name,o.price)})),t(),!0}function Ge(){!function(){const e=document.getElementById("menu-inner-right");if(!e||e.querySelector(".main-menu-ee"))return;e.querySelector(".main-menu-bank")?.remove();const t=a(118),r={class:"forum",href:"/forum",text:n.home.forum};e.insertAdjacentHTML("beforeend",t.render(r))}(),function(){const e=document.querySelector("#carousel-inner");if(!e||document.querySelector(".carousel-ee"))return;const t=a(677),n=[he,...D.minigames||D.explorations||D.market?[ve]:[],ge,fe,be];e.insertAdjacentHTML("beforeend",n.map((e=>t.render(e))).join("\n"));for(const t of n){if(!t.href)continue;const a=e.querySelector(`#${t.id}`);a&&a.addEventListener("click",(()=>{a.classList.contains("active")&&open(t.href,"_blank")}))}document.getElementById(fe.id)?.addEventListener("click",f),document.getElementById(ge.id)?.addEventListener("click",g);const r=document.getElementById(ve.id);r?.addEventListener("click",(()=>{se(),ye(r)})),r&&ye(r)}(),function(){const e=document.getElementById("home-content-smalls");if(!e||e.querySelector(".home-content-small-ee"))return;document.getElementById("home-bank")?.remove();const t=a(342),r={backgroundImage:"/assets/img/minigames/treasurehunt/a48bbc4e4849745ebe6dbcf5313eb3f0.jpg",h4:n.home.forum,href:"/forum",id:"forum"};e.insertAdjacentHTML("beforeend",t.render(r))}(),w(),function(){const e=document.getElementById("profile-contact-actions");if(!e||document.querySelector(".profile-contact-action-ee"))return;const t=a(408),r={id:"profile-contact-action-export",actionDescription:n.profile.export_outfit},i={id:"profile-contact-action-download",actionDescription:n.profile.download_outfit};e.insertAdjacentHTML("beforeend",t.render(r)),e.insertAdjacentHTML("beforeend",t.render(i)),document.getElementById(r.id)?.addEventListener("click",Me),document.getElementById(i.id)?.addEventListener("click",v)}(),Le(),function(){if(we?.disconnect(),we=null,"/marketplace"!==location.pathname)return;const e=document.querySelector(".marketplace-search-items");e&&(we=new MutationObserver(xe),we.observe(e,{childList:!0}),xe())}(),Ce(),H(),me(),function(){if("/marketplace/sell"!==location.pathname)return;const e=document.querySelector(".marketplace-itemsForSale-items");e&&new MutationObserver((()=>{!function(e){const t=e.querySelectorAll("li");for(const e of t)e.addEventListener("click",(()=>{const t=JSON.parse(e.dataset.item??"{}"),a=e.querySelector("img")?.src;if(!a)return;const n=document.querySelector("#marketplace-saleDetail");n&&new MutationObserver(((e,n)=>{const r=document.querySelector(".marketplace-itemDetail-sell");r&&(n.disconnect(),$e(r,t,a))})).observe(n,{childList:!0})}))}(e)})).observe(e,{childList:!0})}(),function(){if(location.pathname.startsWith("/player/appearance")){!function(){const e=document.querySelector("#avatar-background img");e&&(e.style.filter="unset",e.style.height="unset",e.style.mask="linear-gradient(to right, black 50%, transparent 100%)",e.style.minHeight="100vh",e.style.minWidth="50vw",e.style.position="fixed",e.style.transform="unset",e.style.width="unset")}(),function(){const e=document.getElementById("appearance-preview-outer");e&&(e.style.padding="0px");const t=document.getElementById("appearance-preview");t&&(t.style.left="0",t.style.position="fixed",t.style.top="calc(50% - var(--topbar-height))",t.style.transform="translateY(-50%)");const a=document.querySelector("#appearance-preview canvas");a&&(a.style.maxHeight="100vh",a.style.maxWidth="50vw")}(),function(){const e=document.getElementById("appearance-right");e&&(e.style.paddingTop="80px")}(),x.availableItems?availableItems=x.availableItems:x.availableItems=availableItems;for(const e of document.querySelectorAll("#wardrobe-menu>li, #appearance-items-categories li")){const{category:t}=e.dataset;if(t)switch(t){case"background":e.addEventListener("click",(()=>document.getElementById("ee-category")?.remove()));continue;case"favorites":e.addEventListener("click",(()=>{document.getElementById("ee-category")?.remove(),S(t)}));continue;case"attic":continue;default:e.addEventListener("click",(()=>{document.getElementById("appearance-items-category-favorites")?.remove(),S(t)}))}}}}(),"complete"===document.readyState?Fe():window.addEventListener("load",(()=>Fe()))}function Fe(){Be()}new MutationObserver((function(){Ge(),oe()})).observe(document.getElementById("container"),{childList:!0}),D.version!==GM.info.script.version&&("1.2.0"===GM.info.script.version?(D.sales=[],$.flavrNotif("Migrated to v1.2.0. Your sales history was erased.")):$.flavrNotif(`<strong>${GM.info.script.name}</strong> v<strong>${GM.info.script.version}</strong> installed!`),D.version=GM.info.script.version),Ge(),console.log(n.home.script_loaded),oe()})()})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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T0FHN0MsU0FBU0EsS0FDRnhFLEtBR1AsSUFBSS9TLGtCQTNCSixXQUNFcVUsS0FDQXRGLFFBeUJ5QjFPLFFBQWN2SSxTQUFTZ0UsZUFBZSxhQUFjLENBQzdFd0UsV0FBVyxJSTVDUDBELEVBQWE5VCxVQUFZSCxHQUFHQyxLQUFLQyxPQUFPQyxVQUViLFVBQTNCSCxHQUFHQyxLQUFLQyxPQUFPQyxTQUNqQjhULEVBQWFNLE1BQVEsR0FDckJuSyxFQUFFQyxXQUFXLHVEQVNmRCxFQUFFQyxXQUNBLFdBQVdySyxHQUFHQyxLQUFLQyxPQUFPckgsMEJBQTBCbUgsR0FBR0MsS0FBS0MsT0FBT0MsK0JBTHJFOFQsRUFBYTlULFFBQVVILEdBQUdDLEtBQUtDLE9BQU9DLFNKd0N4Q21rQixLQUNBbFgsUUFBUStILElBQUluUSxFQUFVbkYsS0FBS0UsZUFDM0JpZixNIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9ub2RlX21vZHVsZXMvLnBucG0vaG9nYW4uanNAMy4wLjIvbm9kZV9tb2R1bGVzL2hvZ2FuLmpzL2xpYi9jb21waWxlci5qcyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL25vZGVfbW9kdWxlcy8ucG5wbS9ob2dhbi5qc0AzLjAuMi9ub2RlX21vZHVsZXMvaG9nYW4uanMvbGliL2hvZ2FuLmpzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2hvZ2FuLmpzQDMuMC4yL25vZGVfbW9kdWxlcy9ob2dhbi5qcy9saWIvdGVtcGxhdGUuanMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvYXBwZWFyYW5jZV9pdGVtLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvYXBwZWFyYW5jZV9pdGVtc19jYXRlZ29yeS5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2FwcGVhcmFuY2VfaXRlbXNfZ3JvdXAuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9hdXRvX2J1eV9idXR0b24uaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9hdXRvX2J1eV9mbGF2ci5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL2F1dG9fZXhwbG9yZV9idXR0b24uaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9jYXJvdXNlbF9uZXdzLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvY2hhbmdlX3ByaWNlX2ZsYXZyLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvY3JlYXRlZF9vdXRmaXRfZmxhdnIuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9mYXZvdXJpdGVfb3V0Zml0X2ZsYXZyLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvZmF2b3VyaXRlc19hY3Rpb24uaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9mbGF2cl9ub3RpZi9pY29uX21lc3NhZ2UuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9oZWFkZXJfdGFrZW92ZXIuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9ob21lX2NvbnRlbnRfc21hbGwuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9tYWluX21lbnUuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9tYXJrZXRfaGlzdG9yeS5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3RlbXBsYXRlcy9odG1sL291dGZpdF90aHVtYnMuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC9wcm9maWxlX2NvbnRhY3RfYWN0aW9uLmh0bWwiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGVtcGxhdGVzL2h0bWwvc2V0dGluZ3MuaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC93aXNobGlzdF9idXR0b24uaHRtbCIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90ZW1wbGF0ZXMvaHRtbC93aXNobGlzdF9zZXR0aW5ncy5odG1sIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2kxOG4vZW4udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvaTE4bi9mci50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9pMThuL3RyYW5zbGF0ZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9pbmRleGVkX2RiL2RhdGFiYXNlcy5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2luZGV4ZWRfZGIvZmllbGRzLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvaW5kZXhlZF9kYi90YWJsZXMuZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9pbmRleGVkX2RiL2luZGV4ZWRfZGIudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvb3V0Zml0LnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FwcGVhcmFuY2UvZmF2b3VyaXRlc19hY3Rpb25zLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FwcGVhcmFuY2UvZmFrZV9mYXZvdXJpdGVzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2Rvd25sb2FkLWNhbnZhcy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9mYXZvdXJpdGVzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FwcGVhcmFuY2Uvd2FyZHJvYmUudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYXBwZWFyYW5jZS9kcmVzc2luZ19leHBlcmllbmNlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vbm9kZV9tb2R1bGVzLy5wbnBtL2Jsb2ItdXRpbEAyLjAuMi9ub2RlX21vZHVsZXMvYmxvYi11dGlsL2Rpc3QvYmxvYi11dGlsLmVzLmpzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZS5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2UuZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9tYXJrZXRwbGFjZS9lbnVtcy9ib2R5X2xvY2F0aW9uLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWFya2V0cGxhY2UvZW51bXMvY2F0ZWdvcnkuZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9tYXJrZXRwbGFjZS9lbnVtcy9ndWFyZC5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21hcmtldHBsYWNlL2VudW1zL3Jhcml0eS5lbnVtLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21hcmtldHBsYWNlL2VudW1zL3R5cGUuZW51bS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2NvbnNvbGUudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvc2Vzc2lvbl9zdG9yYWdlL3Nlc3Npb25fc3RvcmFnZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS90b3BfYmFyLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21hcmtldHBsYWNlL21hcmtldHBsYWNlX2hhbmRsZXJzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2NsaWNrLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2NsYXNzZXMvYWN0aW9uLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2NsYXNzZXMvYnV5X2FjdGlvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hamF4L2J1eS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hamF4L2FqYXhfc2VhcmNoLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3Rha2VvdmVyL2NsYXNzZXMvZGFpbHlfYWN0aW9uLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FqYXgvY2hhbmdlX3JlZ2lvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9hcGkvcmVzdWx0LmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvZHVyYXRpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvZXhwbG9yYXRpb25fc3RhdHVzLmVudW0udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdGFrZW92ZXIvY2xhc3Nlcy9leHBsb3JhdGlvbl9hY3Rpb24udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYWpheC9leHBsb3JhdGlvbl9yZXN1bHRzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2FqYXgvY2FwdHVyZV9lbmQudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvbWluaWdhbWVzL2ZsYXBweS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9taW5pZ2FtZXMvaGF0Y2hsaW5ncy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9taW5pZ2FtZXMvcGVnZ2xlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21pbmlnYW1lcy9lbWlsZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9icmFpbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9jbGFzc2VzL21pbmlnYW1lX2FjdGlvbi50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy90YWtlb3Zlci9jbGFzc2VzL3dhaXRfYWN0aW9uLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL2F1Y3Rpb25zLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2Nhcm91c2VsL2Nhcm91c2VsX2JlZW1vb3ZfYW5ub3lhbmNlcy50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy9jYXJvdXNlbC9jYXJvdXNlbF9kb3dubG9hZF9mYWNlLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2Nhcm91c2VsL2Nhcm91c2VsX2Rvd25sb2FkX2d1YXJkaWFuLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2Nhcm91c2VsL2Nhcm91c2VsX2VsZGFyeWFfZW5oYW5jZW1lbnRzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL2Nhcm91c2VsL2Nhcm91c2VsX3Rha2VvdmVyLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL2Nhcm91c2VsLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL21hcmtldC50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9wZXQudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvcHJvZmlsZS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9zZWxsLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL3NldHRpbmdzLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL3VpL3dpc2hsaXN0LnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21haW4udHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvdWkvbWVudS50cyIsIndlYnBhY2s6Ly9lbGRhcnlhLWVuaGFuY2VtZW50cy8uL3NyYy91aS9ob21lX2NvbnRlbnQudHMiLCJ3ZWJwYWNrOi8vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLi9zcmMvYXBwZWFyYW5jZS9hcHBlYXJhbmNlX3VpLnRzIiwid2VicGFjazovL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy4vc3JjL21pZ3JhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqICBDb3B5cmlnaHQgMjAxMSBUd2l0dGVyLCBJbmMuXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4oZnVuY3Rpb24gKEhvZ2FuKSB7XG4gIC8vIFNldHVwIHJlZ2V4ICBhc3NpZ25tZW50c1xuICAvLyByZW1vdmUgd2hpdGVzcGFjZSBhY2NvcmRpbmcgdG8gTXVzdGFjaGUgc3BlY1xuICB2YXIgcklzV2hpdGVzcGFjZSA9IC9cXFMvLFxuICAgICAgclF1b3QgPSAvXFxcIi9nLFxuICAgICAgck5ld2xpbmUgPSAgL1xcbi9nLFxuICAgICAgckNyID0gL1xcci9nLFxuICAgICAgclNsYXNoID0gL1xcXFwvZyxcbiAgICAgIHJMaW5lU2VwID0gL1xcdTIwMjgvLFxuICAgICAgclBhcmFncmFwaFNlcCA9IC9cXHUyMDI5LztcblxuICBIb2dhbi50YWdzID0ge1xuICAgICcjJzogMSwgJ14nOiAyLCAnPCc6IDMsICckJzogNCxcbiAgICAnLyc6IDUsICchJzogNiwgJz4nOiA3LCAnPSc6IDgsICdfdic6IDksXG4gICAgJ3snOiAxMCwgJyYnOiAxMSwgJ190JzogMTJcbiAgfTtcblxuICBIb2dhbi5zY2FuID0gZnVuY3Rpb24gc2Nhbih0ZXh0LCBkZWxpbWl0ZXJzKSB7XG4gICAgdmFyIGxlbiA9IHRleHQubGVuZ3RoLFxuICAgICAgICBJTl9URVhUID0gMCxcbiAgICAgICAgSU5fVEFHX1RZUEUgPSAxLFxuICAgICAgICBJTl9UQUcgPSAyLFxuICAgICAgICBzdGF0ZSA9IElOX1RFWFQsXG4gICAgICAgIHRhZ1R5cGUgPSBudWxsLFxuICAgICAgICB0YWcgPSBudWxsLFxuICAgICAgICBidWYgPSAnJyxcbiAgICAgICAgdG9rZW5zID0gW10sXG4gICAgICAgIHNlZW5UYWcgPSBmYWxzZSxcbiAgICAgICAgaSA9IDAsXG4gICAgICAgIGxpbmVTdGFydCA9IDAsXG4gICAgICAgIG90YWcgPSAne3snLFxuICAgICAgICBjdGFnID0gJ319JztcblxuICAgIGZ1bmN0aW9uIGFkZEJ1ZigpIHtcbiAgICAgIGlmIChidWYubGVuZ3RoID4gMCkge1xuICAgICAgICB0b2tlbnMucHVzaCh7dGFnOiAnX3QnLCB0ZXh0OiBuZXcgU3RyaW5nKGJ1Zil9KTtcbiAgICAgICAgYnVmID0gJyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGluZUlzV2hpdGVzcGFjZSgpIHtcbiAgICAgIHZhciBpc0FsbFdoaXRlc3BhY2UgPSB0cnVlO1xuICAgICAgZm9yICh2YXIgaiA9IGxpbmVTdGFydDsgaiA8IHRva2Vucy5sZW5ndGg7IGorKykge1xuICAgICAgICBpc0FsbFdoaXRlc3BhY2UgPVxuICAgICAgICAgIChIb2dhbi50YWdzW3Rva2Vuc1tqXS50YWddIDwgSG9nYW4udGFnc1snX3YnXSkgfHxcbiAgICAgICAgICAodG9rZW5zW2pdLnRhZyA9PSAnX3QnICYmIHRva2Vuc1tqXS50ZXh0Lm1hdGNoKHJJc1doaXRlc3BhY2UpID09PSBudWxsKTtcbiAgICAgICAgaWYgKCFpc0FsbFdoaXRlc3BhY2UpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGlzQWxsV2hpdGVzcGFjZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaWx0ZXJMaW5lKGhhdmVTZWVuVGFnLCBub05ld0xpbmUpIHtcbiAgICAgIGFkZEJ1ZigpO1xuXG4gICAgICBpZiAoaGF2ZVNlZW5UYWcgJiYgbGluZUlzV2hpdGVzcGFjZSgpKSB7XG4gICAgICAgIGZvciAodmFyIGogPSBsaW5lU3RhcnQsIG5leHQ7IGogPCB0b2tlbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICBpZiAodG9rZW5zW2pdLnRleHQpIHtcbiAgICAgICAgICAgIGlmICgobmV4dCA9IHRva2Vuc1tqKzFdKSAmJiBuZXh0LnRhZyA9PSAnPicpIHtcbiAgICAgICAgICAgICAgLy8gc2V0IGluZGVudCB0byB0b2tlbiB2YWx1ZVxuICAgICAgICAgICAgICBuZXh0LmluZGVudCA9IHRva2Vuc1tqXS50ZXh0LnRvU3RyaW5nKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRva2Vucy5zcGxpY2UoaiwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCFub05ld0xpbmUpIHtcbiAgICAgICAgdG9rZW5zLnB1c2goe3RhZzonXFxuJ30pO1xuICAgICAgfVxuXG4gICAgICBzZWVuVGFnID0gZmFsc2U7XG4gICAgICBsaW5lU3RhcnQgPSB0b2tlbnMubGVuZ3RoO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoYW5nZURlbGltaXRlcnModGV4dCwgaW5kZXgpIHtcbiAgICAgIHZhciBjbG9zZSA9ICc9JyArIGN0YWcsXG4gICAgICAgICAgY2xvc2VJbmRleCA9IHRleHQuaW5kZXhPZihjbG9zZSwgaW5kZXgpLFxuICAgICAgICAgIGRlbGltaXRlcnMgPSB0cmltKFxuICAgICAgICAgICAgdGV4dC5zdWJzdHJpbmcodGV4dC5pbmRleE9mKCc9JywgaW5kZXgpICsgMSwgY2xvc2VJbmRleClcbiAgICAgICAgICApLnNwbGl0KCcgJyk7XG5cbiAgICAgIG90YWcgPSBkZWxpbWl0ZXJzWzBdO1xuICAgICAgY3RhZyA9IGRlbGltaXRlcnNbZGVsaW1pdGVycy5sZW5ndGggLSAxXTtcblxuICAgICAgcmV0dXJuIGNsb3NlSW5kZXggKyBjbG9zZS5sZW5ndGggLSAxO1xuICAgIH1cblxuICAgIGlmIChkZWxpbWl0ZXJzKSB7XG4gICAgICBkZWxpbWl0ZXJzID0gZGVsaW1pdGVycy5zcGxpdCgnICcpO1xuICAgICAgb3RhZyA9IGRlbGltaXRlcnNbMF07XG4gICAgICBjdGFnID0gZGVsaW1pdGVyc1sxXTtcbiAgICB9XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmIChzdGF0ZSA9PSBJTl9URVhUKSB7XG4gICAgICAgIGlmICh0YWdDaGFuZ2Uob3RhZywgdGV4dCwgaSkpIHtcbiAgICAgICAgICAtLWk7XG4gICAgICAgICAgYWRkQnVmKCk7XG4gICAgICAgICAgc3RhdGUgPSBJTl9UQUdfVFlQRTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGV4dC5jaGFyQXQoaSkgPT0gJ1xcbicpIHtcbiAgICAgICAgICAgIGZpbHRlckxpbmUoc2VlblRhZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1ZiArPSB0ZXh0LmNoYXJBdChpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gSU5fVEFHX1RZUEUpIHtcbiAgICAgICAgaSArPSBvdGFnLmxlbmd0aCAtIDE7XG4gICAgICAgIHRhZyA9IEhvZ2FuLnRhZ3NbdGV4dC5jaGFyQXQoaSArIDEpXTtcbiAgICAgICAgdGFnVHlwZSA9IHRhZyA/IHRleHQuY2hhckF0KGkgKyAxKSA6ICdfdic7XG4gICAgICAgIGlmICh0YWdUeXBlID09ICc9Jykge1xuICAgICAgICAgIGkgPSBjaGFuZ2VEZWxpbWl0ZXJzKHRleHQsIGkpO1xuICAgICAgICAgIHN0YXRlID0gSU5fVEVYVDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGFnKSB7XG4gICAgICAgICAgICBpKys7XG4gICAgICAgICAgfVxuICAgICAgICAgIHN0YXRlID0gSU5fVEFHO1xuICAgICAgICB9XG4gICAgICAgIHNlZW5UYWcgPSBpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRhZ0NoYW5nZShjdGFnLCB0ZXh0LCBpKSkge1xuICAgICAgICAgIHRva2Vucy5wdXNoKHt0YWc6IHRhZ1R5cGUsIG46IHRyaW0oYnVmKSwgb3RhZzogb3RhZywgY3RhZzogY3RhZyxcbiAgICAgICAgICAgICAgICAgICAgICAgaTogKHRhZ1R5cGUgPT0gJy8nKSA/IHNlZW5UYWcgLSBvdGFnLmxlbmd0aCA6IGkgKyBjdGFnLmxlbmd0aH0pO1xuICAgICAgICAgIGJ1ZiA9ICcnO1xuICAgICAgICAgIGkgKz0gY3RhZy5sZW5ndGggLSAxO1xuICAgICAgICAgIHN0YXRlID0gSU5fVEVYVDtcbiAgICAgICAgICBpZiAodGFnVHlwZSA9PSAneycpIHtcbiAgICAgICAgICAgIGlmIChjdGFnID09ICd9fScpIHtcbiAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2xlYW5UcmlwbGVTdGFjaGUodG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1ZiArPSB0ZXh0LmNoYXJBdChpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGZpbHRlckxpbmUoc2VlblRhZywgdHJ1ZSk7XG5cbiAgICByZXR1cm4gdG9rZW5zO1xuICB9XG5cbiAgZnVuY3Rpb24gY2xlYW5UcmlwbGVTdGFjaGUodG9rZW4pIHtcbiAgICBpZiAodG9rZW4ubi5zdWJzdHIodG9rZW4ubi5sZW5ndGggLSAxKSA9PT0gJ30nKSB7XG4gICAgICB0b2tlbi5uID0gdG9rZW4ubi5zdWJzdHJpbmcoMCwgdG9rZW4ubi5sZW5ndGggLSAxKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0cmltKHMpIHtcbiAgICBpZiAocy50cmltKSB7XG4gICAgICByZXR1cm4gcy50cmltKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHMucmVwbGFjZSgvXlxccyp8XFxzKiQvZywgJycpO1xuICB9XG5cbiAgZnVuY3Rpb24gdGFnQ2hhbmdlKHRhZywgdGV4dCwgaW5kZXgpIHtcbiAgICBpZiAodGV4dC5jaGFyQXQoaW5kZXgpICE9IHRhZy5jaGFyQXQoMCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMSwgbCA9IHRhZy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmICh0ZXh0LmNoYXJBdChpbmRleCArIGkpICE9IHRhZy5jaGFyQXQoaSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gdGhlIHRhZ3MgYWxsb3dlZCBpbnNpZGUgc3VwZXIgdGVtcGxhdGVzXG4gIHZhciBhbGxvd2VkSW5TdXBlciA9IHsnX3QnOiB0cnVlLCAnXFxuJzogdHJ1ZSwgJyQnOiB0cnVlLCAnLyc6IHRydWV9O1xuXG4gIGZ1bmN0aW9uIGJ1aWxkVHJlZSh0b2tlbnMsIGtpbmQsIHN0YWNrLCBjdXN0b21UYWdzKSB7XG4gICAgdmFyIGluc3RydWN0aW9ucyA9IFtdLFxuICAgICAgICBvcGVuZXIgPSBudWxsLFxuICAgICAgICB0YWlsID0gbnVsbCxcbiAgICAgICAgdG9rZW4gPSBudWxsO1xuXG4gICAgdGFpbCA9IHN0YWNrW3N0YWNrLmxlbmd0aCAtIDFdO1xuXG4gICAgd2hpbGUgKHRva2Vucy5sZW5ndGggPiAwKSB7XG4gICAgICB0b2tlbiA9IHRva2Vucy5zaGlmdCgpO1xuXG4gICAgICBpZiAodGFpbCAmJiB0YWlsLnRhZyA9PSAnPCcgJiYgISh0b2tlbi50YWcgaW4gYWxsb3dlZEluU3VwZXIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSWxsZWdhbCBjb250ZW50IGluIDwgc3VwZXIgdGFnLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoSG9nYW4udGFnc1t0b2tlbi50YWddIDw9IEhvZ2FuLnRhZ3NbJyQnXSB8fCBpc09wZW5lcih0b2tlbiwgY3VzdG9tVGFncykpIHtcbiAgICAgICAgc3RhY2sucHVzaCh0b2tlbik7XG4gICAgICAgIHRva2VuLm5vZGVzID0gYnVpbGRUcmVlKHRva2VucywgdG9rZW4udGFnLCBzdGFjaywgY3VzdG9tVGFncyk7XG4gICAgICB9IGVsc2UgaWYgKHRva2VuLnRhZyA9PSAnLycpIHtcbiAgICAgICAgaWYgKHN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2xvc2luZyB0YWcgd2l0aG91dCBvcGVuZXI6IC8nICsgdG9rZW4ubik7XG4gICAgICAgIH1cbiAgICAgICAgb3BlbmVyID0gc3RhY2sucG9wKCk7XG4gICAgICAgIGlmICh0b2tlbi5uICE9IG9wZW5lci5uICYmICFpc0Nsb3Nlcih0b2tlbi5uLCBvcGVuZXIubiwgY3VzdG9tVGFncykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05lc3RpbmcgZXJyb3I6ICcgKyBvcGVuZXIubiArICcgdnMuICcgKyB0b2tlbi5uKTtcbiAgICAgICAgfVxuICAgICAgICBvcGVuZXIuZW5kID0gdG9rZW4uaTtcbiAgICAgICAgcmV0dXJuIGluc3RydWN0aW9ucztcbiAgICAgIH0gZWxzZSBpZiAodG9rZW4udGFnID09ICdcXG4nKSB7XG4gICAgICAgIHRva2VuLmxhc3QgPSAodG9rZW5zLmxlbmd0aCA9PSAwKSB8fCAodG9rZW5zWzBdLnRhZyA9PSAnXFxuJyk7XG4gICAgICB9XG5cbiAgICAgIGluc3RydWN0aW9ucy5wdXNoKHRva2VuKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhY2subGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtaXNzaW5nIGNsb3NpbmcgdGFnOiAnICsgc3RhY2sucG9wKCkubik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RydWN0aW9ucztcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzT3BlbmVyKHRva2VuLCB0YWdzKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGwgPSB0YWdzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKHRhZ3NbaV0ubyA9PSB0b2tlbi5uKSB7XG4gICAgICAgIHRva2VuLnRhZyA9ICcjJztcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNDbG9zZXIoY2xvc2UsIG9wZW4sIHRhZ3MpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHRhZ3MubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBpZiAodGFnc1tpXS5jID09IGNsb3NlICYmIHRhZ3NbaV0ubyA9PSBvcGVuKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0cmluZ2lmeVN1YnN0aXR1dGlvbnMob2JqKSB7XG4gICAgdmFyIGl0ZW1zID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIG9iaikge1xuICAgICAgaXRlbXMucHVzaCgnXCInICsgZXNjKGtleSkgKyAnXCI6IGZ1bmN0aW9uKGMscCx0LGkpIHsnICsgb2JqW2tleV0gKyAnfScpO1xuICAgIH1cbiAgICByZXR1cm4gXCJ7IFwiICsgaXRlbXMuam9pbihcIixcIikgKyBcIiB9XCI7XG4gIH1cblxuICBmdW5jdGlvbiBzdHJpbmdpZnlQYXJ0aWFscyhjb2RlT2JqKSB7XG4gICAgdmFyIHBhcnRpYWxzID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIGNvZGVPYmoucGFydGlhbHMpIHtcbiAgICAgIHBhcnRpYWxzLnB1c2goJ1wiJyArIGVzYyhrZXkpICsgJ1wiOntuYW1lOlwiJyArIGVzYyhjb2RlT2JqLnBhcnRpYWxzW2tleV0ubmFtZSkgKyAnXCIsICcgKyBzdHJpbmdpZnlQYXJ0aWFscyhjb2RlT2JqLnBhcnRpYWxzW2tleV0pICsgXCJ9XCIpO1xuICAgIH1cbiAgICByZXR1cm4gXCJwYXJ0aWFsczoge1wiICsgcGFydGlhbHMuam9pbihcIixcIikgKyBcIn0sIHN1YnM6IFwiICsgc3RyaW5naWZ5U3Vic3RpdHV0aW9ucyhjb2RlT2JqLnN1YnMpO1xuICB9XG5cbiAgSG9nYW4uc3RyaW5naWZ5ID0gZnVuY3Rpb24oY29kZU9iaiwgdGV4dCwgb3B0aW9ucykge1xuICAgIHJldHVybiBcIntjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgXCIgKyBIb2dhbi53cmFwTWFpbihjb2RlT2JqLmNvZGUpICsgXCIgfSxcIiArIHN0cmluZ2lmeVBhcnRpYWxzKGNvZGVPYmopICsgIFwifVwiO1xuICB9XG5cbiAgdmFyIHNlcmlhbE5vID0gMDtcbiAgSG9nYW4uZ2VuZXJhdGUgPSBmdW5jdGlvbih0cmVlLCB0ZXh0LCBvcHRpb25zKSB7XG4gICAgc2VyaWFsTm8gPSAwO1xuICAgIHZhciBjb250ZXh0ID0geyBjb2RlOiAnJywgc3Viczoge30sIHBhcnRpYWxzOiB7fSB9O1xuICAgIEhvZ2FuLndhbGsodHJlZSwgY29udGV4dCk7XG5cbiAgICBpZiAob3B0aW9ucy5hc1N0cmluZykge1xuICAgICAgcmV0dXJuIHRoaXMuc3RyaW5naWZ5KGNvbnRleHQsIHRleHQsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm1ha2VUZW1wbGF0ZShjb250ZXh0LCB0ZXh0LCBvcHRpb25zKTtcbiAgfVxuXG4gIEhvZ2FuLndyYXBNYWluID0gZnVuY3Rpb24oY29kZSkge1xuICAgIHJldHVybiAndmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTsnICsgY29kZSArICdyZXR1cm4gdC5mbCgpOyc7XG4gIH1cblxuICBIb2dhbi50ZW1wbGF0ZSA9IEhvZ2FuLlRlbXBsYXRlO1xuXG4gIEhvZ2FuLm1ha2VUZW1wbGF0ZSA9IGZ1bmN0aW9uKGNvZGVPYmosIHRleHQsIG9wdGlvbnMpIHtcbiAgICB2YXIgdGVtcGxhdGUgPSB0aGlzLm1ha2VQYXJ0aWFscyhjb2RlT2JqKTtcbiAgICB0ZW1wbGF0ZS5jb2RlID0gbmV3IEZ1bmN0aW9uKCdjJywgJ3AnLCAnaScsIHRoaXMud3JhcE1haW4oY29kZU9iai5jb2RlKSk7XG4gICAgcmV0dXJuIG5ldyB0aGlzLnRlbXBsYXRlKHRlbXBsYXRlLCB0ZXh0LCB0aGlzLCBvcHRpb25zKTtcbiAgfVxuXG4gIEhvZ2FuLm1ha2VQYXJ0aWFscyA9IGZ1bmN0aW9uKGNvZGVPYmopIHtcbiAgICB2YXIga2V5LCB0ZW1wbGF0ZSA9IHtzdWJzOiB7fSwgcGFydGlhbHM6IGNvZGVPYmoucGFydGlhbHMsIG5hbWU6IGNvZGVPYmoubmFtZX07XG4gICAgZm9yIChrZXkgaW4gdGVtcGxhdGUucGFydGlhbHMpIHtcbiAgICAgIHRlbXBsYXRlLnBhcnRpYWxzW2tleV0gPSB0aGlzLm1ha2VQYXJ0aWFscyh0ZW1wbGF0ZS5wYXJ0aWFsc1trZXldKTtcbiAgICB9XG4gICAgZm9yIChrZXkgaW4gY29kZU9iai5zdWJzKSB7XG4gICAgICB0ZW1wbGF0ZS5zdWJzW2tleV0gPSBuZXcgRnVuY3Rpb24oJ2MnLCAncCcsICd0JywgJ2knLCBjb2RlT2JqLnN1YnNba2V5XSk7XG4gICAgfVxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGVzYyhzKSB7XG4gICAgcmV0dXJuIHMucmVwbGFjZShyU2xhc2gsICdcXFxcXFxcXCcpXG4gICAgICAgICAgICAucmVwbGFjZShyUXVvdCwgJ1xcXFxcXFwiJylcbiAgICAgICAgICAgIC5yZXBsYWNlKHJOZXdsaW5lLCAnXFxcXG4nKVxuICAgICAgICAgICAgLnJlcGxhY2UockNyLCAnXFxcXHInKVxuICAgICAgICAgICAgLnJlcGxhY2UockxpbmVTZXAsICdcXFxcdTIwMjgnKVxuICAgICAgICAgICAgLnJlcGxhY2UoclBhcmFncmFwaFNlcCwgJ1xcXFx1MjAyOScpO1xuICB9XG5cbiAgZnVuY3Rpb24gY2hvb3NlTWV0aG9kKHMpIHtcbiAgICByZXR1cm4gKH5zLmluZGV4T2YoJy4nKSkgPyAnZCcgOiAnZic7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVQYXJ0aWFsKG5vZGUsIGNvbnRleHQpIHtcbiAgICB2YXIgcHJlZml4ID0gXCI8XCIgKyAoY29udGV4dC5wcmVmaXggfHwgXCJcIik7XG4gICAgdmFyIHN5bSA9IHByZWZpeCArIG5vZGUubiArIHNlcmlhbE5vKys7XG4gICAgY29udGV4dC5wYXJ0aWFsc1tzeW1dID0ge25hbWU6IG5vZGUubiwgcGFydGlhbHM6IHt9fTtcbiAgICBjb250ZXh0LmNvZGUgKz0gJ3QuYih0LnJwKFwiJyArICBlc2Moc3ltKSArICdcIixjLHAsXCInICsgKG5vZGUuaW5kZW50IHx8ICcnKSArICdcIikpOyc7XG4gICAgcmV0dXJuIHN5bTtcbiAgfVxuXG4gIEhvZ2FuLmNvZGVnZW4gPSB7XG4gICAgJyMnOiBmdW5jdGlvbihub2RlLCBjb250ZXh0KSB7XG4gICAgICBjb250ZXh0LmNvZGUgKz0gJ2lmKHQucyh0LicgKyBjaG9vc2VNZXRob2Qobm9kZS5uKSArICcoXCInICsgZXNjKG5vZGUubikgKyAnXCIsYyxwLDEpLCcgK1xuICAgICAgICAgICAgICAgICAgICAgICdjLHAsMCwnICsgbm9kZS5pICsgJywnICsgbm9kZS5lbmQgKyAnLFwiJyArIG5vZGUub3RhZyArIFwiIFwiICsgbm9kZS5jdGFnICsgJ1wiKSl7JyArXG4gICAgICAgICAgICAgICAgICAgICAgJ3QucnMoYyxwLCcgKyAnZnVuY3Rpb24oYyxwLHQpeyc7XG4gICAgICBIb2dhbi53YWxrKG5vZGUubm9kZXMsIGNvbnRleHQpO1xuICAgICAgY29udGV4dC5jb2RlICs9ICd9KTtjLnBvcCgpO30nO1xuICAgIH0sXG5cbiAgICAnXic6IGZ1bmN0aW9uKG5vZGUsIGNvbnRleHQpIHtcbiAgICAgIGNvbnRleHQuY29kZSArPSAnaWYoIXQucyh0LicgKyBjaG9vc2VNZXRob2Qobm9kZS5uKSArICcoXCInICsgZXNjKG5vZGUubikgKyAnXCIsYyxwLDEpLGMscCwxLDAsMCxcIlwiKSl7JztcbiAgICAgIEhvZ2FuLndhbGsobm9kZS5ub2RlcywgY29udGV4dCk7XG4gICAgICBjb250ZXh0LmNvZGUgKz0gJ307JztcbiAgICB9LFxuXG4gICAgJz4nOiBjcmVhdGVQYXJ0aWFsLFxuICAgICc8JzogZnVuY3Rpb24obm9kZSwgY29udGV4dCkge1xuICAgICAgdmFyIGN0eCA9IHtwYXJ0aWFsczoge30sIGNvZGU6ICcnLCBzdWJzOiB7fSwgaW5QYXJ0aWFsOiB0cnVlfTtcbiAgICAgIEhvZ2FuLndhbGsobm9kZS5ub2RlcywgY3R4KTtcbiAgICAgIHZhciB0ZW1wbGF0ZSA9IGNvbnRleHQucGFydGlhbHNbY3JlYXRlUGFydGlhbChub2RlLCBjb250ZXh0KV07XG4gICAgICB0ZW1wbGF0ZS5zdWJzID0gY3R4LnN1YnM7XG4gICAgICB0ZW1wbGF0ZS5wYXJ0aWFscyA9IGN0eC5wYXJ0aWFscztcbiAgICB9LFxuXG4gICAgJyQnOiBmdW5jdGlvbihub2RlLCBjb250ZXh0KSB7XG4gICAgICB2YXIgY3R4ID0ge3N1YnM6IHt9LCBjb2RlOiAnJywgcGFydGlhbHM6IGNvbnRleHQucGFydGlhbHMsIHByZWZpeDogbm9kZS5ufTtcbiAgICAgIEhvZ2FuLndhbGsobm9kZS5ub2RlcywgY3R4KTtcbiAgICAgIGNvbnRleHQuc3Vic1tub2RlLm5dID0gY3R4LmNvZGU7XG4gICAgICBpZiAoIWNvbnRleHQuaW5QYXJ0aWFsKSB7XG4gICAgICAgIGNvbnRleHQuY29kZSArPSAndC5zdWIoXCInICsgZXNjKG5vZGUubikgKyAnXCIsYyxwLGkpOyc7XG4gICAgICB9XG4gICAgfSxcblxuICAgICdcXG4nOiBmdW5jdGlvbihub2RlLCBjb250ZXh0KSB7XG4gICAgICBjb250ZXh0LmNvZGUgKz0gd3JpdGUoJ1wiXFxcXG5cIicgKyAobm9kZS5sYXN0ID8gJycgOiAnICsgaScpKTtcbiAgICB9LFxuXG4gICAgJ192JzogZnVuY3Rpb24obm9kZSwgY29udGV4dCkge1xuICAgICAgY29udGV4dC5jb2RlICs9ICd0LmIodC52KHQuJyArIGNob29zZU1ldGhvZChub2RlLm4pICsgJyhcIicgKyBlc2Mobm9kZS5uKSArICdcIixjLHAsMCkpKTsnO1xuICAgIH0sXG5cbiAgICAnX3QnOiBmdW5jdGlvbihub2RlLCBjb250ZXh0KSB7XG4gICAgICBjb250ZXh0LmNvZGUgKz0gd3JpdGUoJ1wiJyArIGVzYyhub2RlLnRleHQpICsgJ1wiJyk7XG4gICAgfSxcblxuICAgICd7JzogdHJpcGxlU3RhY2hlLFxuXG4gICAgJyYnOiB0cmlwbGVTdGFjaGVcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyaXBsZVN0YWNoZShub2RlLCBjb250ZXh0KSB7XG4gICAgY29udGV4dC5jb2RlICs9ICd0LmIodC50KHQuJyArIGNob29zZU1ldGhvZChub2RlLm4pICsgJyhcIicgKyBlc2Mobm9kZS5uKSArICdcIixjLHAsMCkpKTsnO1xuICB9XG5cbiAgZnVuY3Rpb24gd3JpdGUocykge1xuICAgIHJldHVybiAndC5iKCcgKyBzICsgJyk7JztcbiAgfVxuXG4gIEhvZ2FuLndhbGsgPSBmdW5jdGlvbihub2RlbGlzdCwgY29udGV4dCkge1xuICAgIHZhciBmdW5jO1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gbm9kZWxpc3QubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmdW5jID0gSG9nYW4uY29kZWdlbltub2RlbGlzdFtpXS50YWddO1xuICAgICAgZnVuYyAmJiBmdW5jKG5vZGVsaXN0W2ldLCBjb250ZXh0KTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnRleHQ7XG4gIH1cblxuICBIb2dhbi5wYXJzZSA9IGZ1bmN0aW9uKHRva2VucywgdGV4dCwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHJldHVybiBidWlsZFRyZWUodG9rZW5zLCAnJywgW10sIG9wdGlvbnMuc2VjdGlvblRhZ3MgfHwgW10pO1xuICB9XG5cbiAgSG9nYW4uY2FjaGUgPSB7fTtcblxuICBIb2dhbi5jYWNoZUtleSA9IGZ1bmN0aW9uKHRleHQsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gW3RleHQsICEhb3B0aW9ucy5hc1N0cmluZywgISFvcHRpb25zLmRpc2FibGVMYW1iZGEsIG9wdGlvbnMuZGVsaW1pdGVycywgISFvcHRpb25zLm1vZGVsR2V0XS5qb2luKCd8fCcpO1xuICB9XG5cbiAgSG9nYW4uY29tcGlsZSA9IGZ1bmN0aW9uKHRleHQsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB2YXIga2V5ID0gSG9nYW4uY2FjaGVLZXkodGV4dCwgb3B0aW9ucyk7XG4gICAgdmFyIHRlbXBsYXRlID0gdGhpcy5jYWNoZVtrZXldO1xuXG4gICAgaWYgKHRlbXBsYXRlKSB7XG4gICAgICB2YXIgcGFydGlhbHMgPSB0ZW1wbGF0ZS5wYXJ0aWFscztcbiAgICAgIGZvciAodmFyIG5hbWUgaW4gcGFydGlhbHMpIHtcbiAgICAgICAgZGVsZXRlIHBhcnRpYWxzW25hbWVdLmluc3RhbmNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRlbXBsYXRlO1xuICAgIH1cblxuICAgIHRlbXBsYXRlID0gdGhpcy5nZW5lcmF0ZSh0aGlzLnBhcnNlKHRoaXMuc2Nhbih0ZXh0LCBvcHRpb25zLmRlbGltaXRlcnMpLCB0ZXh0LCBvcHRpb25zKSwgdGV4dCwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVba2V5XSA9IHRlbXBsYXRlO1xuICB9XG59KSh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcgPyBleHBvcnRzIDogSG9nYW4pO1xuIiwiLypcbiAqICBDb3B5cmlnaHQgMjAxMSBUd2l0dGVyLCBJbmMuXG4gKiAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vLyBUaGlzIGZpbGUgaXMgZm9yIHVzZSB3aXRoIE5vZGUuanMuIFNlZSBkaXN0LyBmb3IgYnJvd3NlciBmaWxlcy5cblxudmFyIEhvZ2FuID0gcmVxdWlyZSgnLi9jb21waWxlcicpO1xuSG9nYW4uVGVtcGxhdGUgPSByZXF1aXJlKCcuL3RlbXBsYXRlJykuVGVtcGxhdGU7XG5Ib2dhbi50ZW1wbGF0ZSA9IEhvZ2FuLlRlbXBsYXRlO1xubW9kdWxlLmV4cG9ydHMgPSBIb2dhbjtcbiIsIi8qXG4gKiAgQ29weXJpZ2h0IDIwMTEgVHdpdHRlciwgSW5jLlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxudmFyIEhvZ2FuID0ge307XG5cbihmdW5jdGlvbiAoSG9nYW4pIHtcbiAgSG9nYW4uVGVtcGxhdGUgPSBmdW5jdGlvbiAoY29kZU9iaiwgdGV4dCwgY29tcGlsZXIsIG9wdGlvbnMpIHtcbiAgICBjb2RlT2JqID0gY29kZU9iaiB8fCB7fTtcbiAgICB0aGlzLnIgPSBjb2RlT2JqLmNvZGUgfHwgdGhpcy5yO1xuICAgIHRoaXMuYyA9IGNvbXBpbGVyO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGhpcy50ZXh0ID0gdGV4dCB8fCAnJztcbiAgICB0aGlzLnBhcnRpYWxzID0gY29kZU9iai5wYXJ0aWFscyB8fCB7fTtcbiAgICB0aGlzLnN1YnMgPSBjb2RlT2JqLnN1YnMgfHwge307XG4gICAgdGhpcy5idWYgPSAnJztcbiAgfVxuXG4gIEhvZ2FuLlRlbXBsYXRlLnByb3RvdHlwZSA9IHtcbiAgICAvLyByZW5kZXI6IHJlcGxhY2VkIGJ5IGdlbmVyYXRlZCBjb2RlLlxuICAgIHI6IGZ1bmN0aW9uIChjb250ZXh0LCBwYXJ0aWFscywgaW5kZW50KSB7IHJldHVybiAnJzsgfSxcblxuICAgIC8vIHZhcmlhYmxlIGVzY2FwaW5nXG4gICAgdjogaG9nYW5Fc2NhcGUsXG5cbiAgICAvLyB0cmlwbGUgc3RhY2hlXG4gICAgdDogY29lcmNlVG9TdHJpbmcsXG5cbiAgICByZW5kZXI6IGZ1bmN0aW9uIHJlbmRlcihjb250ZXh0LCBwYXJ0aWFscywgaW5kZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy5yaShbY29udGV4dF0sIHBhcnRpYWxzIHx8IHt9LCBpbmRlbnQpO1xuICAgIH0sXG5cbiAgICAvLyByZW5kZXIgaW50ZXJuYWwgLS0gYSBob29rIGZvciBvdmVycmlkZXMgdGhhdCBjYXRjaGVzIHBhcnRpYWxzIHRvb1xuICAgIHJpOiBmdW5jdGlvbiAoY29udGV4dCwgcGFydGlhbHMsIGluZGVudCkge1xuICAgICAgcmV0dXJuIHRoaXMucihjb250ZXh0LCBwYXJ0aWFscywgaW5kZW50KTtcbiAgICB9LFxuXG4gICAgLy8gZW5zdXJlUGFydGlhbFxuICAgIGVwOiBmdW5jdGlvbihzeW1ib2wsIHBhcnRpYWxzKSB7XG4gICAgICB2YXIgcGFydGlhbCA9IHRoaXMucGFydGlhbHNbc3ltYm9sXTtcblxuICAgICAgLy8gY2hlY2sgdG8gc2VlIHRoYXQgaWYgd2UndmUgaW5zdGFudGlhdGVkIHRoaXMgcGFydGlhbCBiZWZvcmVcbiAgICAgIHZhciB0ZW1wbGF0ZSA9IHBhcnRpYWxzW3BhcnRpYWwubmFtZV07XG4gICAgICBpZiAocGFydGlhbC5pbnN0YW5jZSAmJiBwYXJ0aWFsLmJhc2UgPT0gdGVtcGxhdGUpIHtcbiAgICAgICAgcmV0dXJuIHBhcnRpYWwuaW5zdGFuY2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGVtcGxhdGUgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKCF0aGlzLmMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21waWxlciBhdmFpbGFibGUuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRlbXBsYXRlID0gdGhpcy5jLmNvbXBpbGUodGVtcGxhdGUsIHRoaXMub3B0aW9ucyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGVtcGxhdGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIHVzZSB0aGlzIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHBhcnRpYWxzIGRpY3Rpb25hcnkgaGFzIGNoYW5nZWRcbiAgICAgIHRoaXMucGFydGlhbHNbc3ltYm9sXS5iYXNlID0gdGVtcGxhdGU7XG5cbiAgICAgIGlmIChwYXJ0aWFsLnN1YnMpIHtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGNvbnNpZGVyIHBhcmVudCB0ZW1wbGF0ZSBub3dcbiAgICAgICAgaWYgKCFwYXJ0aWFscy5zdGFja1RleHQpIHBhcnRpYWxzLnN0YWNrVGV4dCA9IHt9O1xuICAgICAgICBmb3IgKGtleSBpbiBwYXJ0aWFsLnN1YnMpIHtcbiAgICAgICAgICBpZiAoIXBhcnRpYWxzLnN0YWNrVGV4dFtrZXldKSB7XG4gICAgICAgICAgICBwYXJ0aWFscy5zdGFja1RleHRba2V5XSA9ICh0aGlzLmFjdGl2ZVN1YiAhPT0gdW5kZWZpbmVkICYmIHBhcnRpYWxzLnN0YWNrVGV4dFt0aGlzLmFjdGl2ZVN1Yl0pID8gcGFydGlhbHMuc3RhY2tUZXh0W3RoaXMuYWN0aXZlU3ViXSA6IHRoaXMudGV4dDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGVtcGxhdGUgPSBjcmVhdGVTcGVjaWFsaXplZFBhcnRpYWwodGVtcGxhdGUsIHBhcnRpYWwuc3VicywgcGFydGlhbC5wYXJ0aWFscyxcbiAgICAgICAgICB0aGlzLnN0YWNrU3VicywgdGhpcy5zdGFja1BhcnRpYWxzLCBwYXJ0aWFscy5zdGFja1RleHQpO1xuICAgICAgfVxuICAgICAgdGhpcy5wYXJ0aWFsc1tzeW1ib2xdLmluc3RhbmNlID0gdGVtcGxhdGU7XG5cbiAgICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgICB9LFxuXG4gICAgLy8gdHJpZXMgdG8gZmluZCBhIHBhcnRpYWwgaW4gdGhlIGN1cnJlbnQgc2NvcGUgYW5kIHJlbmRlciBpdFxuICAgIHJwOiBmdW5jdGlvbihzeW1ib2wsIGNvbnRleHQsIHBhcnRpYWxzLCBpbmRlbnQpIHtcbiAgICAgIHZhciBwYXJ0aWFsID0gdGhpcy5lcChzeW1ib2wsIHBhcnRpYWxzKTtcbiAgICAgIGlmICghcGFydGlhbCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJ0aWFsLnJpKGNvbnRleHQsIHBhcnRpYWxzLCBpbmRlbnQpO1xuICAgIH0sXG5cbiAgICAvLyByZW5kZXIgYSBzZWN0aW9uXG4gICAgcnM6IGZ1bmN0aW9uKGNvbnRleHQsIHBhcnRpYWxzLCBzZWN0aW9uKSB7XG4gICAgICB2YXIgdGFpbCA9IGNvbnRleHRbY29udGV4dC5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKCFpc0FycmF5KHRhaWwpKSB7XG4gICAgICAgIHNlY3Rpb24oY29udGV4dCwgcGFydGlhbHMsIHRoaXMpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGFpbC5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb250ZXh0LnB1c2godGFpbFtpXSk7XG4gICAgICAgIHNlY3Rpb24oY29udGV4dCwgcGFydGlhbHMsIHRoaXMpO1xuICAgICAgICBjb250ZXh0LnBvcCgpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBtYXliZSBzdGFydCBhIHNlY3Rpb25cbiAgICBzOiBmdW5jdGlvbih2YWwsIGN0eCwgcGFydGlhbHMsIGludmVydGVkLCBzdGFydCwgZW5kLCB0YWdzKSB7XG4gICAgICB2YXIgcGFzcztcblxuICAgICAgaWYgKGlzQXJyYXkodmFsKSAmJiB2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB2YWwgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWwgPSB0aGlzLm1zKHZhbCwgY3R4LCBwYXJ0aWFscywgaW52ZXJ0ZWQsIHN0YXJ0LCBlbmQsIHRhZ3MpO1xuICAgICAgfVxuXG4gICAgICBwYXNzID0gISF2YWw7XG5cbiAgICAgIGlmICghaW52ZXJ0ZWQgJiYgcGFzcyAmJiBjdHgpIHtcbiAgICAgICAgY3R4LnB1c2goKHR5cGVvZiB2YWwgPT0gJ29iamVjdCcpID8gdmFsIDogY3R4W2N0eC5sZW5ndGggLSAxXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXNzO1xuICAgIH0sXG5cbiAgICAvLyBmaW5kIHZhbHVlcyB3aXRoIGRvdHRlZCBuYW1lc1xuICAgIGQ6IGZ1bmN0aW9uKGtleSwgY3R4LCBwYXJ0aWFscywgcmV0dXJuRm91bmQpIHtcbiAgICAgIHZhciBmb3VuZCxcbiAgICAgICAgICBuYW1lcyA9IGtleS5zcGxpdCgnLicpLFxuICAgICAgICAgIHZhbCA9IHRoaXMuZihuYW1lc1swXSwgY3R4LCBwYXJ0aWFscywgcmV0dXJuRm91bmQpLFxuICAgICAgICAgIGRvTW9kZWxHZXQgPSB0aGlzLm9wdGlvbnMubW9kZWxHZXQsXG4gICAgICAgICAgY3ggPSBudWxsO1xuXG4gICAgICBpZiAoa2V5ID09PSAnLicgJiYgaXNBcnJheShjdHhbY3R4Lmxlbmd0aCAtIDJdKSkge1xuICAgICAgICB2YWwgPSBjdHhbY3R4Lmxlbmd0aCAtIDFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGZvdW5kID0gZmluZEluU2NvcGUobmFtZXNbaV0sIHZhbCwgZG9Nb2RlbEdldCk7XG4gICAgICAgICAgaWYgKGZvdW5kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGN4ID0gdmFsO1xuICAgICAgICAgICAgdmFsID0gZm91bmQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbCA9ICcnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmV0dXJuRm91bmQgJiYgIXZhbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICghcmV0dXJuRm91bmQgJiYgdHlwZW9mIHZhbCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGN0eC5wdXNoKGN4KTtcbiAgICAgICAgdmFsID0gdGhpcy5tdih2YWwsIGN0eCwgcGFydGlhbHMpO1xuICAgICAgICBjdHgucG9wKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWw7XG4gICAgfSxcblxuICAgIC8vIGZpbmQgdmFsdWVzIHdpdGggbm9ybWFsIG5hbWVzXG4gICAgZjogZnVuY3Rpb24oa2V5LCBjdHgsIHBhcnRpYWxzLCByZXR1cm5Gb3VuZCkge1xuICAgICAgdmFyIHZhbCA9IGZhbHNlLFxuICAgICAgICAgIHYgPSBudWxsLFxuICAgICAgICAgIGZvdW5kID0gZmFsc2UsXG4gICAgICAgICAgZG9Nb2RlbEdldCA9IHRoaXMub3B0aW9ucy5tb2RlbEdldDtcblxuICAgICAgZm9yICh2YXIgaSA9IGN0eC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICB2ID0gY3R4W2ldO1xuICAgICAgICB2YWwgPSBmaW5kSW5TY29wZShrZXksIHYsIGRvTW9kZWxHZXQpO1xuICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmb3VuZCA9IHRydWU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFmb3VuZCkge1xuICAgICAgICByZXR1cm4gKHJldHVybkZvdW5kKSA/IGZhbHNlIDogXCJcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXR1cm5Gb3VuZCAmJiB0eXBlb2YgdmFsID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFsID0gdGhpcy5tdih2YWwsIGN0eCwgcGFydGlhbHMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0sXG5cbiAgICAvLyBoaWdoZXIgb3JkZXIgdGVtcGxhdGVzXG4gICAgbHM6IGZ1bmN0aW9uKGZ1bmMsIGN4LCBwYXJ0aWFscywgdGV4dCwgdGFncykge1xuICAgICAgdmFyIG9sZFRhZ3MgPSB0aGlzLm9wdGlvbnMuZGVsaW1pdGVycztcblxuICAgICAgdGhpcy5vcHRpb25zLmRlbGltaXRlcnMgPSB0YWdzO1xuICAgICAgdGhpcy5iKHRoaXMuY3QoY29lcmNlVG9TdHJpbmcoZnVuYy5jYWxsKGN4LCB0ZXh0KSksIGN4LCBwYXJ0aWFscykpO1xuICAgICAgdGhpcy5vcHRpb25zLmRlbGltaXRlcnMgPSBvbGRUYWdzO1xuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcblxuICAgIC8vIGNvbXBpbGUgdGV4dFxuICAgIGN0OiBmdW5jdGlvbih0ZXh0LCBjeCwgcGFydGlhbHMpIHtcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMuZGlzYWJsZUxhbWJkYSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xhbWJkYSBmZWF0dXJlcyBkaXNhYmxlZC4nKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmMuY29tcGlsZSh0ZXh0LCB0aGlzLm9wdGlvbnMpLnJlbmRlcihjeCwgcGFydGlhbHMpO1xuICAgIH0sXG5cbiAgICAvLyB0ZW1wbGF0ZSByZXN1bHQgYnVmZmVyaW5nXG4gICAgYjogZnVuY3Rpb24ocykgeyB0aGlzLmJ1ZiArPSBzOyB9LFxuXG4gICAgZmw6IGZ1bmN0aW9uKCkgeyB2YXIgciA9IHRoaXMuYnVmOyB0aGlzLmJ1ZiA9ICcnOyByZXR1cm4gcjsgfSxcblxuICAgIC8vIG1ldGhvZCByZXBsYWNlIHNlY3Rpb25cbiAgICBtczogZnVuY3Rpb24oZnVuYywgY3R4LCBwYXJ0aWFscywgaW52ZXJ0ZWQsIHN0YXJ0LCBlbmQsIHRhZ3MpIHtcbiAgICAgIHZhciB0ZXh0U291cmNlLFxuICAgICAgICAgIGN4ID0gY3R4W2N0eC5sZW5ndGggLSAxXSxcbiAgICAgICAgICByZXN1bHQgPSBmdW5jLmNhbGwoY3gpO1xuXG4gICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmIChpbnZlcnRlZCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRleHRTb3VyY2UgPSAodGhpcy5hY3RpdmVTdWIgJiYgdGhpcy5zdWJzVGV4dCAmJiB0aGlzLnN1YnNUZXh0W3RoaXMuYWN0aXZlU3ViXSkgPyB0aGlzLnN1YnNUZXh0W3RoaXMuYWN0aXZlU3ViXSA6IHRoaXMudGV4dDtcbiAgICAgICAgICByZXR1cm4gdGhpcy5scyhyZXN1bHQsIGN4LCBwYXJ0aWFscywgdGV4dFNvdXJjZS5zdWJzdHJpbmcoc3RhcnQsIGVuZCksIHRhZ3MpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSxcblxuICAgIC8vIG1ldGhvZCByZXBsYWNlIHZhcmlhYmxlXG4gICAgbXY6IGZ1bmN0aW9uKGZ1bmMsIGN0eCwgcGFydGlhbHMpIHtcbiAgICAgIHZhciBjeCA9IGN0eFtjdHgubGVuZ3RoIC0gMV07XG4gICAgICB2YXIgcmVzdWx0ID0gZnVuYy5jYWxsKGN4KTtcblxuICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gdGhpcy5jdChjb2VyY2VUb1N0cmluZyhyZXN1bHQuY2FsbChjeCkpLCBjeCwgcGFydGlhbHMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sXG5cbiAgICBzdWI6IGZ1bmN0aW9uKG5hbWUsIGNvbnRleHQsIHBhcnRpYWxzLCBpbmRlbnQpIHtcbiAgICAgIHZhciBmID0gdGhpcy5zdWJzW25hbWVdO1xuICAgICAgaWYgKGYpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVTdWIgPSBuYW1lO1xuICAgICAgICBmKGNvbnRleHQsIHBhcnRpYWxzLCB0aGlzLCBpbmRlbnQpO1xuICAgICAgICB0aGlzLmFjdGl2ZVN1YiA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICB9O1xuXG4gIC8vRmluZCBhIGtleSBpbiBhbiBvYmplY3RcbiAgZnVuY3Rpb24gZmluZEluU2NvcGUoa2V5LCBzY29wZSwgZG9Nb2RlbEdldCkge1xuICAgIHZhciB2YWw7XG5cbiAgICBpZiAoc2NvcGUgJiYgdHlwZW9mIHNjb3BlID09ICdvYmplY3QnKSB7XG5cbiAgICAgIGlmIChzY29wZVtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFsID0gc2NvcGVba2V5XTtcblxuICAgICAgLy8gdHJ5IGxvb2t1cCB3aXRoIGdldCBmb3IgYmFja2JvbmUgb3Igc2ltaWxhciBtb2RlbCBkYXRhXG4gICAgICB9IGVsc2UgaWYgKGRvTW9kZWxHZXQgJiYgc2NvcGUuZ2V0ICYmIHR5cGVvZiBzY29wZS5nZXQgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWwgPSBzY29wZS5nZXQoa2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmFsO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3BlY2lhbGl6ZWRQYXJ0aWFsKGluc3RhbmNlLCBzdWJzLCBwYXJ0aWFscywgc3RhY2tTdWJzLCBzdGFja1BhcnRpYWxzLCBzdGFja1RleHQpIHtcbiAgICBmdW5jdGlvbiBQYXJ0aWFsVGVtcGxhdGUoKSB7fTtcbiAgICBQYXJ0aWFsVGVtcGxhdGUucHJvdG90eXBlID0gaW5zdGFuY2U7XG4gICAgZnVuY3Rpb24gU3Vic3RpdHV0aW9ucygpIHt9O1xuICAgIFN1YnN0aXR1dGlvbnMucHJvdG90eXBlID0gaW5zdGFuY2Uuc3VicztcbiAgICB2YXIga2V5O1xuICAgIHZhciBwYXJ0aWFsID0gbmV3IFBhcnRpYWxUZW1wbGF0ZSgpO1xuICAgIHBhcnRpYWwuc3VicyA9IG5ldyBTdWJzdGl0dXRpb25zKCk7XG4gICAgcGFydGlhbC5zdWJzVGV4dCA9IHt9OyAgLy9oZWhlLiBzdWJzdGV4dC5cbiAgICBwYXJ0aWFsLmJ1ZiA9ICcnO1xuXG4gICAgc3RhY2tTdWJzID0gc3RhY2tTdWJzIHx8IHt9O1xuICAgIHBhcnRpYWwuc3RhY2tTdWJzID0gc3RhY2tTdWJzO1xuICAgIHBhcnRpYWwuc3Vic1RleHQgPSBzdGFja1RleHQ7XG4gICAgZm9yIChrZXkgaW4gc3Vicykge1xuICAgICAgaWYgKCFzdGFja1N1YnNba2V5XSkgc3RhY2tTdWJzW2tleV0gPSBzdWJzW2tleV07XG4gICAgfVxuICAgIGZvciAoa2V5IGluIHN0YWNrU3Vicykge1xuICAgICAgcGFydGlhbC5zdWJzW2tleV0gPSBzdGFja1N1YnNba2V5XTtcbiAgICB9XG5cbiAgICBzdGFja1BhcnRpYWxzID0gc3RhY2tQYXJ0aWFscyB8fCB7fTtcbiAgICBwYXJ0aWFsLnN0YWNrUGFydGlhbHMgPSBzdGFja1BhcnRpYWxzO1xuICAgIGZvciAoa2V5IGluIHBhcnRpYWxzKSB7XG4gICAgICBpZiAoIXN0YWNrUGFydGlhbHNba2V5XSkgc3RhY2tQYXJ0aWFsc1trZXldID0gcGFydGlhbHNba2V5XTtcbiAgICB9XG4gICAgZm9yIChrZXkgaW4gc3RhY2tQYXJ0aWFscykge1xuICAgICAgcGFydGlhbC5wYXJ0aWFsc1trZXldID0gc3RhY2tQYXJ0aWFsc1trZXldO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0aWFsO1xuICB9XG5cbiAgdmFyIHJBbXAgPSAvJi9nLFxuICAgICAgckx0ID0gLzwvZyxcbiAgICAgIHJHdCA9IC8+L2csXG4gICAgICByQXBvcyA9IC9cXCcvZyxcbiAgICAgIHJRdW90ID0gL1xcXCIvZyxcbiAgICAgIGhDaGFycyA9IC9bJjw+XFxcIlxcJ10vO1xuXG4gIGZ1bmN0aW9uIGNvZXJjZVRvU3RyaW5nKHZhbCkge1xuICAgIHJldHVybiBTdHJpbmcoKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkgPyAnJyA6IHZhbCk7XG4gIH1cblxuICBmdW5jdGlvbiBob2dhbkVzY2FwZShzdHIpIHtcbiAgICBzdHIgPSBjb2VyY2VUb1N0cmluZyhzdHIpO1xuICAgIHJldHVybiBoQ2hhcnMudGVzdChzdHIpID9cbiAgICAgIHN0clxuICAgICAgICAucmVwbGFjZShyQW1wLCAnJmFtcDsnKVxuICAgICAgICAucmVwbGFjZShyTHQsICcmbHQ7JylcbiAgICAgICAgLnJlcGxhY2Uockd0LCAnJmd0OycpXG4gICAgICAgIC5yZXBsYWNlKHJBcG9zLCAnJiMzOTsnKVxuICAgICAgICAucmVwbGFjZShyUXVvdCwgJyZxdW90OycpIDpcbiAgICAgIHN0cjtcbiAgfVxuXG4gIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbihhKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcblxufSkodHlwZW9mIGV4cG9ydHMgIT09ICd1bmRlZmluZWQnID8gZXhwb3J0cyA6IEhvZ2FuKTtcbiIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGxpIGlkPVxcXCJhcHBlYXJhbmNlLWl0ZW0tXCIpO3QuYih0LnYodC5mKFwiaXRlbWlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtIGdyb3VwLVwiKTt0LmIodC52KHQuZihcImdyb3VwXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBkYXRhLWl0ZW1pZD1cXFwiXCIpO3QuYih0LnYodC5mKFwiaXRlbWlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBkYXRhLW5hbWU9XFxcIlwiKTt0LmIodC52KHQuZihcIm5hbWVcIixjLHAsMCkpKTt0LmIoXCJcXFwiIGRhdGEtcmFyaXR5PVxcXCJcIik7dC5iKHQudih0LmYoXCJyYXJpdHlcIixjLHAsMCkpKTt0LmIoXCJcXFwiIGRhdGEtcmFyaXR5bmFtZT1cXFwiXCIpO3QuYih0LnYodC5mKFwicmFyaXR5bmFtZVwiLGMscCwwKSkpO3QuYihcIlxcXCI+PGRpdiBjbGFzcz1cXFwicmFyaXR5LW1hcmtlci1cIik7dC5iKHQudih0LmYoXCJyYXJpdHlcIixjLHAsMCkpKTt0LmIoXCJcXFwiPjwvZGl2PjxpbWcgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbS1pY29uXFxcIiBzcmM9XFxcIlwiKTt0LmIodC52KHQuZihcImljb25cIixjLHAsMCkpKTt0LmIoXCJcXFwiPjwvbGk+XCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxkaXYgaWQ9XFxcImVlLWNhdGVnb3J5XFxcIiBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeSBhY3RpdmVcXFwiIGRhdGEtY2F0ZWdvcnk9XFxcIlwiKTt0LmIodC52KHQuZihcImNhdGVnb3J5XCIsYyxwLDApKSk7dC5iKFwiXFxcIiBkYXRhLWNhdGVnb3J5aWQ9XFxcIlwiKTt0LmIodC52KHQuZihcImNhdGVnb3J5aWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiPjxzdHlsZT4jZWUtaXRlbXMge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHNjcm9sbGJhci1jb2xvcjogZGFyaztcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH08L3N0eWxlPjx1bCBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtcy1saXN0XFxcIiBpZD1cXFwiZWUtaXRlbXNcXFwiIHN0eWxlPVxcXCJtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gNTY1cHgpXFxcIj4gXCIpO3QuYih0LnQodC5mKFwiaXRlbXNcIixjLHAsMCkpKTt0LmIoXCI8L3VsPjxkaXYgaWQ9XFxcImVlLWluZm9cXFwiIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW1zLWluZm9cXFwiPjxkaXYgY2xhc3M9XFxcImFwcGVhcmFuY2UtaW5mby10aXBzXFxcIj48L2Rpdj48aDMgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbS1pbmZvLW5hbWVcXFwiPjwvaDM+PGRpdiBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtLWluZm8tZ3VhcmRcXFwiPjwvZGl2PjxkaXYgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbS1pbmZvLXJhcml0eVxcXCI+PC9kaXY+PGRpdiBjbGFzcz1cXFwiYXBwZWFyYW5jZS1pdGVtLWluZm8tYnV0dG9uc1xcXCI+PGRpdiBjbGFzcz1cXFwiYXBwZWFyYW5jZS1mb3J3YXJkIG5sLWJ1dHRvblxcXCI+IFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hcHBlYXJhbmNlLmJ1dHRvbnMuZm9yd2FyZFwiLGMscCwwKSkpO3QuYihcIiA8L2Rpdj48ZGl2IGNsYXNzPVxcXCJhcHBlYXJhbmNlLWJhY2t3YXJkIG5sLWJ1dHRvblxcXCI+IFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hcHBlYXJhbmNlLmJ1dHRvbnMuYmFja3dhcmRcIixjLHAsMCkpKTt0LmIoXCIgPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+XCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxkaXYgaWQ9XFxcImFwcGVhcmFuY2UtaXRlbXMtZ3JvdXAtXCIpO3QuYih0LnYodC5mKFwiZ3JvdXBcIixjLHAsMCkpKTt0LmIoXCJcXFwiIGNsYXNzPVxcXCJhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5XFxcIiBkYXRhLWNhdGVnb3J5aWQ9XFxcIlwiKTt0LmIodC52KHQuZihcImNhdGVnb3J5aWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiIGRhdGEtY2F0ZWdvcnk9XFxcIlwiKTt0LmIodC52KHQuZihcImNhdGVnb3J5XCIsYyxwLDApKSk7dC5iKFwiXFxcIj48dWwgY2xhc3M9XFxcImFwcGVhcmFuY2UtaXRlbXMtbGlzdFxcXCI+IFwiKTt0LmIodC50KHQuZihcIml0ZW1zXCIsYyxwLDApKSk7dC5iKFwiPC91bD48L2Rpdj5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19KTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGRpdiBpZD1cXFwibWFya2V0cGxhY2UtaXRlbURldGFpbC1pbmZvLWF1dG9idXlcXFwiIHN0eWxlPVxcXCJ0ZXh0LWFsaWduOiBjZW50ZXI7IG1hcmdpbjogMjBweCBhdXRvXFxcIj48ZGl2IGNsYXNzPVxcXCJubC1idXR0b25cXFwiPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuYWRkX3RvX3dpc2hsaXN0LnRpdGxlXCIsYyxwLDApKSk7dC5iKFwiPC9kaXY+PC9kaXY+XCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxoMT5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0LmFkZF90b193aXNobGlzdC50aXRsZVwiLGMscCwwKSkpO3QuYihcIjwvaDE+PHA+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC5hZGRfdG9fd2lzaGxpc3QudGV4dFwiLGMscCwwKSkpO3QuYihcIjwvcD5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19KTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGJ1dHRvbiBpZD1cXFwiYXV0by1leHBsb3JlLWJ1dHRvblxcXCIgY2xhc3M9XFxcIm5sLWJ1dHRvbiBcIik7aWYodC5zKHQuZihcImFjdGl2ZVwiLGMscCwxKSxjLHAsMCw2MSw2NyxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiYWN0aXZlXCIpO30pO2MucG9wKCk7fXQuYihcIlxcXCIgZGF0YS1pZD1cXFwiXCIpO3QuYih0LnYodC5mKFwibG9jYXRpb25JZFwiLGMscCwwKSkpO3QuYihcIlxcXCIgZGF0YS1tYXBpZD1cXFwiXCIpO3QuYih0LnYodC5mKFwicmVnaW9uSWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiPiBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUucGV0LmF1dG9fZXhwbG9yZVwiLGMscCwwKSkpO3QuYihcIiA8L2J1dHRvbj5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19KTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGEgaWQ9XFxcIlwiKTt0LmIodC52KHQuZihcImlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBjbGFzcz1cXFwiY2Fyb3VzZWwtbmV3cyBjYXJvdXNlbC1lZVxcXCIgaHJlZj1cXFwiXFxcIiBzdHlsZT1cXFwiYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiKTt0LmIodC52KHQuZihcImJhY2tncm91bmRJbWFnZVwiLGMscCwwKSkpO3QuYihcIilcXFwiPjxkaXY+PGg0PlwiKTt0LmIodC52KHQuZihcImg0XCIsYyxwLDApKSk7dC5iKFwiPC9oND48aDU+XCIpO3QuYih0LnYodC5mKFwiaDVcIixjLHAsMCkpKTt0LmIoXCI8L2g1PjxwPlwiKTt0LmIodC52KHQuZihcInBcIixjLHAsMCkpKTt0LmIoXCI8L3A+PC9kaXY+PC9hPlwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0pO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8aDE+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC5jaGFuZ2VfcHJpY2UudGl0bGVcIixjLHAsMCkpKTt0LmIoXCI8L2gxPjxwPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuY2hhbmdlX3ByaWNlLnRleHRcIixjLHAsMCkpKTt0LmIoXCI8L3A+XCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxoMT5cIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLnNhdmVfb3V0Zml0LnRpdGxlXCIsYyxwLDApKSk7dC5iKFwiPC9oMT48cD5cIik7dC5iKHQudCh0LmQoXCJ0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLnNhdmVfb3V0Zml0LnNhdmVkX2xvY2FsbHlcIixjLHAsMCkpKTt0LmIoXCI8L3A+PGJyPjxwPlwiKTt0LmIodC50KHQuZChcInRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuc2F2ZV9vdXRmaXQuZ290b19hY2NvdW50XCIsYyxwLDApKSk7dC5iKFwiPC9wPjxpbnB1dCBpZD1cXFwiY2hvb3NlLW5hbWVcXFwiIG1heGxlbmd0aD1cXFwiMzBcXFwiIG1pbmxlbmd0aD1cXFwiMVxcXCIgcGxhY2Vob2xkZXI9XFxcIlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuc2F2ZV9vdXRmaXQucGxhY2Vob2xkZXJcIixjLHAsMCkpKTt0LmIoXCJcXFwiPlwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0pO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8c3R5bGU+LmNyZWF0ZWQtb3V0Zml0LXBvcHVwIC5mbGF2ci1vdXRlciAuZmxhdnItbWVzc2FnZTo6YWZ0ZXIge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIpO3QuYih0LnYodC5mKFwidXJsXCIsYyxwLDApKSk7dC5iKFwiKTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgYmFja2dyb3VuZC1zaXplOiBjb250YWluO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfTwvc3R5bGU+PGgxPlwiKTt0LmIodC52KHQuZihcIm5hbWVcIixjLHAsMCkpKTt0LmIoXCI8L2gxPjxwPlwiKTt0LmIodC50KHQuZChcInRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuY2xpY2tfb3V0Zml0LnNhdmVkX2xvY2FsbHlcIixjLHAsMCkpKTt0LmIoXCI8L3A+PGJyPjxwPlwiKTt0LmIodC50KHQuZChcInRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuY2xpY2tfb3V0Zml0LmdvdG9fYWNjb3VudFwiLGMscCwwKSkpO3QuYihcIjwvcD5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19KTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGJ1dHRvbiBpZD1cXFwiXCIpO3QuYih0LnYodC5mKFwiaWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiIGNsYXNzPVxcXCJubC1idXR0b24gZmF2b3JpdGVzLWFjdGlvbi1lZVxcXCI+XCIpO3QuYih0LnYodC5mKFwidGV4dFwiLGMscCwwKSkpO3QuYihcIjwvYnV0dG9uPlwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0pO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8aW1nIHNyYz1cXFwiXCIpO3QuYih0LnYodC5mKFwiaWNvblwiLGMscCwwKSkpO3QuYihcIlxcXCIgYWx0PVxcXCJcIik7dC5iKHQudih0LmYoXCJuYW1lXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBoZWlnaHQ9XFxcIjIxXFxcIiBzdHlsZT1cXFwiZGlzcGxheTogaW5saW5lLWJsb2NrOyBtYXJnaW46IC0ycHggYXV0b1xcXCI+IFwiKTt0LmIodC50KHQuZihcIm1lc3NhZ2VcIixjLHAsMCkpKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0pO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8bGkgaWQ9XFxcImhlYWRlci10YWtlb3ZlclxcXCIgdGl0bGU9XFxcIlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5ob21lLnRha2VvdmVyXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBzdHlsZT1cXFwidHJhbnNpdGlvbjogdHJhbnNmb3JtIGVhc2UtaW4tb3V0IDIwMG1zOyBjdXJzb3I6IHBvaW50ZXJcXFwiIG9uTW91c2VPdmVyPVxcXCJ0aGlzLnN0eWxlLnRyYW5zZm9ybT0nc2NhbGUoMS4zKSdcXFwiIG9uTW91c2VPdXQ9XFxcInRoaXMuc3R5bGUudHJhbnNmb3JtPSdzY2FsZSgxKSdcXFwiPjxhPjxpbWcgc3JjPVxcXCIvc3RhdGljL2ltZy9uZXctbGF5b3V0L2hvbWUvY29ubmVjdGVkL2xvY2sucG5nXFxcIiBhbHQ9XFxcIlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5ob21lLnRha2VvdmVyXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBzdHlsZT1cXFwiZmlsdGVyOiBjb250cmFzdCgwJSkgYnJpZ2h0bmVzcygyMDAlKSBcIik7aWYoIXQucyh0LmYoXCJ0YWtlb3ZlclwiLGMscCwxKSxjLHAsMSwwLDAsXCJcIikpe3QuYihcIm9wYWNpdHkoMClcIik7fTt0LmIoXCJcXFwiIGhlaWdodD1cXFwiMjFcXFwiPjwvYT48L2xpPlwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0pO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8YSBpZD1cXFwiaG9tZS1cIik7dC5iKHQudih0LmYoXCJpZFwiLGMscCwwKSkpO3QuYihcIlxcXCIgY2xhc3M9XFxcImhvbWUtY29udGVudC10aWxlIGhvbWUtY29udGVudC1zbWFsbCBob21lLWNvbnRlbnQtc21hbGwtZWVcXFwiIGhyZWY9XFxcIlwiKTt0LmIodC52KHQuZihcImhyZWZcIixjLHAsMCkpKTt0LmIoXCJcXFwiIHN0eWxlPVxcXCJiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIpO3QuYih0LnYodC5mKFwiYmFja2dyb3VuZEltYWdlXCIsYyxwLDApKSk7dC5iKFwiKTtcXFwiPjxoND5cIik7dC5iKHQudih0LmYoXCJoNFwiLGMscCwwKSkpO3QuYihcIjwvaDQ+PC9hPlwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0pO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8bGkgY2xhc3M9XFxcIm1haW4tbWVudS1cIik7dC5iKHQudih0LmYoXCJjbGFzc1wiLGMscCwwKSkpO3QuYihcIiBtYWluLW1lbnUtZWVcXFwiPjxhIGhyZWY9XFxcIlwiKTt0LmIodC52KHQuZihcImhyZWZcIixjLHAsMCkpKTt0LmIoXCJcXFwiPlwiKTt0LmIodC52KHQuZihcInRleHRcIixjLHAsMCkpKTt0LmIoXCI8L2E+PC9saT5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19KTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPHN0eWxlPi8qICNtYXJrZXRwbGFjZS1hYnN0cmFjdC1wdXJjaGFzZXMgYW5kICNtYXJrZXRwbGFjZS1hYnN0cmFjdC1zYWxlcyB3ZXJlXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICByZS13cml0dGVuIHRvIHRhcmdldCAjcHVyY2hhc2UtaGlzdG9yeSBhbmQgI3NhbGUtaGlzdG9yeS4gKi9cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAjcHVyY2hhc2UtaGlzdG9yeSxcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICNzYWxlLWhpc3Rvcnkge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBoZWlnaHQ6IDYwMHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHdpZHRoOiAzNjBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICNzYWxlLWhpc3RvcnkgLmFic3RyYWN0LWFjdGlvbnMsXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAjcHVyY2hhc2UtaGlzdG9yeSAuYWJzdHJhY3QtYWN0aW9ucyB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgdG9wOiAtNDBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgZGlzcGxheTogZmxleDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1ldmVubHk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGhlaWdodDogODBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAjc2FsZS1oaXN0b3J5IC5hYnN0cmFjdC10aW1lLFwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgI3B1cmNoYXNlLWhpc3RvcnkgLmFic3RyYWN0LXRpbWUge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBwb3NpdGlvbjogc3RhdGljO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBkaXNwbGF5OiBpbmxpbmU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGhlaWdodDogYXV0bztcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgY29sb3I6ICNmYjg5MDA7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGZvbnQtd2VpZ2h0OiBib2xkO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBmb250LXNpemU6IDEzcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgI3B1cmNoYXNlLWhpc3Rvcnkge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBtYXJnaW4tcmlnaHQ6IDgwcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgI3B1cmNoYXNlLWhpc3Rvcnk6YmVmb3JlIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgY29udGVudDogXFxcIlxcXCI7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgdG9wOiAxMjBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgcmlnaHQ6IC00MnB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBib3JkZXItcmlnaHQ6IHNvbGlkIDJweCAjYWFhO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBoZWlnaHQ6IDMyMHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC8qIEN1c3RvbSBmaXhlcyB0byB0aGUgbGF5b3V0ICovXCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgI3B1cmNoYXNlLWhpc3RvcnkgbGkge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBtYXJnaW4tbGVmdDogNHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICBtYXJnaW4tcmlnaHQ6IDRweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH08L3N0eWxlPjxkaXYgY2xhc3M9XFxcIm1hcmtldHBsYWNlLWFic3RyYWN0XFxcIiBpZD1cXFwicHVyY2hhc2UtaGlzdG9yeVxcXCI+PGgyIGNsYXNzPVxcXCJzZWN0aW9uLXN1YnRpdGxlXFxcIj4gXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5wdXJjaGFzZV9oaXN0b3J5XCIsYyxwLDApKSk7dC5iKFwiIDwvaDI+PHVsIGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1wdXJjaGFzZXMtaXRlbXNcXFwiPiBcIik7aWYodC5zKHQuZihcInB1cmNoYXNlc1wiLGMscCwxKSxjLHAsMCwxMjQyLDIxMjgsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcIiA8bGkgZGF0YS1pdGVtaWQ9XFxcIlwiKTt0LmIodC52KHQuZihcIml0ZW1pZFwiLGMscCwwKSkpO3QuYihcIlxcXCIgY2xhc3M9XFxcIm1hcmtldHBsYWNlLWFic3RyYWN0IG1hcmtldHBsYWNlLWF1Y3Rpb25zLWl0ZW0gbWFya2V0cGxhY2Utc2FsZXMtaXRlbVxcXCI+PGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtaWNvblxcXCI+PGltZyBzcmM9XFxcIlwiKTt0LmIodC52KHQuZihcImljb25cIixjLHAsMCkpKTt0LmIoXCJcXFwiPjwvZGl2PjxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWNvbnRhaW5lclxcXCI+PGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtbmFtZVxcXCI+XCIpO3QuYih0LnYodC5mKFwibmFtZVwiLGMscCwwKSkpO3QuYihcIjwvZGl2PjxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWNvbnRlbnRcXFwiPjxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWN1cnJlbnRQcmljZVxcXCI+IFwiKTtpZih0LnModC5mKFwiY3VycmVudFByaWNlXCIsYyxwLDEpLGMscCwwLDE1NTksMTY5MSxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuY3VycmVudF9wcmljZVwiLGMscCwwKSkpO3QuYihcIiA8c3BhbiBjbGFzcz1cXFwicHJpY2UtaXRlbVxcXCI+XCIpO3QuYih0LnYodC5kKFwiY3VycmVudFByaWNlLnByaWNlXCIsYyxwLDApKSk7dC5iKFwiPC9zcGFuPjxzcGFuIGNsYXNzPVxcXCJtYWFuYS1pY29uXFxcIj48L3NwYW4+IFwiKTt9KTtjLnBvcCgpO310LmIoXCIgPGJyPiBcIik7aWYodC5zKHQuZihcImJ1eU5vd1ByaWNlXCIsYyxwLDEpLGMscCwwLDE3MzAsMTg2MSxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiIFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuYnV5X25vd19wcmljZVwiLGMscCwwKSkpO3QuYihcIiA8c3BhbiBjbGFzcz1cXFwicHJpY2UtaXRlbVxcXCI+XCIpO3QuYih0LnYodC5kKFwiYnV5Tm93UHJpY2UucHJpY2VcIixjLHAsMCkpKTt0LmIoXCI8L3NwYW4+PHNwYW4gY2xhc3M9XFxcIm1hYW5hLWljb25cXFwiPjwvc3Bhbj4gXCIpO30pO2MucG9wKCk7fXQuYihcIiA8L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1hY3Rpb25zXFxcIj48ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC10aW1lXFxcIj5cIik7dC5iKHQudih0LmYoXCJkYXRlXCIsYyxwLDApKSk7dC5iKFwiPC9kaXY+PGRpdiBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbSBtYXJrZXRwbGFjZS1pdGVtRGV0YWlsLWNhbmNlbCBkZWxldGUtYnV0dG9uXFxcIiBkYXRhLWl0ZW1pZD1cXFwiXCIpO3QuYih0LnYodC5mKFwiaXRlbWlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIj4gXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5kZWxldGVcIixjLHAsMCkpKTt0LmIoXCIgPC9kaXY+PC9kaXY+PC9saT4gXCIpO30pO2MucG9wKCk7fXQuYihcIiA8L3VsPjwvZGl2PjxkaXYgY2xhc3M9XFxcIm1hcmtldHBsYWNlLWFic3RyYWN0XFxcIiBpZD1cXFwic2FsZS1oaXN0b3J5XFxcIj48aDIgY2xhc3M9XFxcInNlY3Rpb24tc3VidGl0bGVcXFwiPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuc2FsZXNfaGlzdG9yeVwiLGMscCwwKSkpO3QuYihcIjwvaDI+PHVsIGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1zYWxlcy1pdGVtc1xcXCI+IFwiKTtpZih0LnModC5mKFwic2FsZXNcIixjLHAsMSksYyxwLDAsMjMzMCwzMTI4LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCIgPGxpIGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1hYnN0cmFjdCBtYXJrZXRwbGFjZS1zYWxlcy1pdGVtXFxcIj48ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1pY29uXFxcIj48aW1nIHNyYz1cXFwiXCIpO3QuYih0LnYodC5mKFwiaWNvblwiLGMscCwwKSkpO3QuYihcIlxcXCI+PC9kaXY+PGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtY29udGFpbmVyXFxcIj48ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1uYW1lXFxcIj5cIik7dC5iKHQudih0LmYoXCJuYW1lXCIsYyxwLDApKSk7dC5iKFwiPC9kaXY+PGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtY29udGVudFxcXCI+PGRpdiBjbGFzcz1cXFwiYWJzdHJhY3QtY3VycmVudFByaWNlXFxcIj4gXCIpO2lmKHQucyh0LmYoXCJjdXJyZW50UHJpY2VcIixjLHAsMSksYyxwLDAsMjU5NiwyNzIyLFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCIgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5jdXJyZW50X3ByaWNlXCIsYyxwLDApKSk7dC5iKFwiIDxzcGFuIGNsYXNzPVxcXCJwcmljZS1pdGVtXFxcIj5cIik7dC5iKHQudih0LmYoXCJjdXJyZW50UHJpY2VcIixjLHAsMCkpKTt0LmIoXCI8L3NwYW4+PHNwYW4gY2xhc3M9XFxcIm1hYW5hLWljb25cXFwiPjwvc3Bhbj4gXCIpO30pO2MucG9wKCk7fXQuYihcIiA8YnI+IFwiKTtpZih0LnModC5mKFwiYnV5Tm93UHJpY2VcIixjLHAsMSksYyxwLDAsMjc2MSwyODg2LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCIgXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC5hdWN0aW9ucy5idXlfbm93X3ByaWNlXCIsYyxwLDApKSk7dC5iKFwiIDxzcGFuIGNsYXNzPVxcXCJwcmljZS1pdGVtXFxcIj5cIik7dC5iKHQudih0LmYoXCJidXlOb3dQcmljZVwiLGMscCwwKSkpO3QuYihcIjwvc3Bhbj48c3BhbiBjbGFzcz1cXFwibWFhbmEtaWNvblxcXCI+PC9zcGFuPiBcIik7fSk7Yy5wb3AoKTt9dC5iKFwiIDwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9XFxcImFic3RyYWN0LWFjdGlvbnNcXFwiPjxkaXYgY2xhc3M9XFxcImFic3RyYWN0LXRpbWVcXFwiPlwiKTt0LmIodC52KHQuZihcImRhdGVcIixjLHAsMCkpKTt0LmIoXCI8L2Rpdj48ZGl2IGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtIG1hcmtldHBsYWNlLWl0ZW1EZXRhaWwtY2FuY2VsIGRlbGV0ZS1idXR0b25cXFwiPiBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLmRlbGV0ZVwiLGMscCwwKSkpO3QuYihcIiA8L2Rpdj48L2Rpdj48L2xpPiBcIik7fSk7Yy5wb3AoKTt9dC5iKFwiIDwvdWw+PC9kaXY+XCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxkaXYgaWQ9XFxcImVlLW91dGZpdC10aHVtYnNcXFwiPjxzdHlsZT4jYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXMgLnNsb3QuZWUtYXZhaWxhYmxlLXNsb3Qge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvYXZhaWxhYmxlLWZhdm9yaXRlLnBuZyk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTE0cHggLTExcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYmFja2dyb3VuZC1zaXplOiAxNzFweCAyNDRweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBib3JkZXItcmFkaXVzOiA0NHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGJveC1zaGFkb3c6IDAgMCA0cHggNHB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktZmF2b3JpdGVzIC5zbG90LmVlLWF2YWlsYWJsZS1zbG90OjphZnRlciB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgYmFja2dyb3VuZDogdXJsKC9zdGF0aWMvaW1nL25ldy1sYXlvdXQvd2FyZHJvYmUvaWNvbi1wbHVzLnBuZyk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgY29udGVudDogXFxcIiBcXFwiO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMCAwIDZweCByZ2JhKDIzNywgMTIsIDI0NSwgMC45KSk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgaGVpZ2h0OiA3MXB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGxlZnQ6IDUwJTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBvcGFjaXR5OiAwO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0b3A6IDUwJTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IGVhc2UtaW4tb3V0IDEwMG1zO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHdpZHRoOiA2NnB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9XCIpO3QuYihcIlxcblwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXMgLnNsb3QuZWUtYXZhaWxhYmxlLXNsb3Q6aG92ZXI6OmFmdGVyLFwiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS1mYXZvcml0ZXMgLnNsb3QuZWUtb3V0Zml0LXRodW1iOmhvdmVyIHAge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIG9wYWNpdHk6IDE7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LWZhdm9yaXRlcyAuc2xvdC5lZS1vdXRmaXQtdGh1bWIgaW1nIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBib3JkZXItcmFkaXVzOiA0NHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIGhlaWdodDogMTAwJTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB3aWR0aDogMTAwJTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgI2FwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktZmF2b3JpdGVzIC5zbG90LmVlLW91dGZpdC10aHVtYiBwIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNSk7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgY29sb3I6ICNmZmY7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZm9udC1mYW1pbHk6IFxcXCJBbGVncmV5YSBTYW5zIFNDXFxcIiwgc2Fucy1zZXJpZjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBmb250LXNpemU6IDIycHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgZm9udC13ZWlnaHQ6IDcwMDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBsZWZ0OiA1MCU7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgbGluZS1oZWlnaHQ6IDIycHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgb3BhY2l0eTogMDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICBwYWRkaW5nOiAxMnB4IDA7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgICAgcG9zaXRpb246IGFic29sdXRlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0b3A6IDUwJTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IGVhc2UtaW4tb3V0IDQwMG1zO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICAgIHdpZHRoOiAxMDAlO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB9PC9zdHlsZT4gXCIpO2lmKHQucyh0LmYoXCJvdXRmaXRzXCIsYyxwLDEpLGMscCwwLDE2NDAsMTc1NyxcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiIDxkaXYgY2xhc3M9XFxcInNsb3QgZWUtb3V0Zml0LXRodW1iXFxcIiBkYXRhLWFycmF5LWluZGV4PVxcXCJcIik7dC5iKHQudih0LmYoXCJpZFwiLGMscCwwKSkpO3QuYihcIlxcXCI+PGltZyBhbHQ9XFxcIlwiKTt0LmIodC52KHQuZihcIm5hbWVcIixjLHAsMCkpKTt0LmIoXCJcXFwiIHNyYz1cXFwiXCIpO3QuYih0LnYodC5mKFwidXJsXCIsYyxwLDApKSk7dC5iKFwiXFxcIj48cD5cIik7dC5iKHQudih0LmYoXCJuYW1lXCIsYyxwLDApKSk7dC5iKFwiPC9wPjwvZGl2PiBcIik7fSk7Yy5wb3AoKTt9dC5iKFwiIDxkaXYgY2xhc3M9XFxcInNsb3QgZWUtYXZhaWxhYmxlLXNsb3RcXFwiPjwvZGl2PjwvZGl2PlwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0pO3JldHVybiBUOyB9KCk7IiwidmFyIEggPSByZXF1aXJlKFwiaG9nYW4uanNcIik7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCkgeyB2YXIgVCA9IG5ldyBILlRlbXBsYXRlKHtjb2RlOiBmdW5jdGlvbiAoYyxwLGkpIHsgdmFyIHQ9dGhpczt0LmIoaT1pfHxcIlwiKTt0LmIoXCI8bGkgaWQ9XFxcIlwiKTt0LmIodC52KHQuZihcImlkXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBjbGFzcz1cXFwicHJvZmlsZS1jb250YWN0LWFjdGlvbi1lZVxcXCI+PHNwYW4gY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc21cXFwiPjxkaXYgY2xhc3M9XFxcImFjdGlvbi1kZXNjcmlwdGlvblxcXCI+XCIpO3QuYih0LnYodC5mKFwiYWN0aW9uRGVzY3JpcHRpb25cIixjLHAsMCkpKTt0LmIoXCI8L2Rpdj48L3NwYW4+PC9saT5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19KTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPGRpdiBjbGFzcz1cXFwiYWNjb3VudC1taXNjLWJsb2MgYWNjb3VudC1lZS1ibG9jIGJsb2NcXFwiPjxoMiBjbGFzcz1cXFwic2VjdGlvbi10aXRsZVxcXCI+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLmFjY291bnQuZW5oYW5jZW1lbnRzXCIsYyxwLDApKSk7dC5iKFwiPC9oMj48dWwgY2xhc3M9XFxcImFjY291bnQtbWlzYy1hY3Rpb25zXFxcIj48bGkgaWQ9XFxcImVlLWRlYnVnLWVuYWJsZWRcXFwiIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtIFwiKTtpZih0LnModC5mKFwiZGVidWdcIixjLHAsMSksYyxwLDAsMjE2LDIyMixcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiYWN0aXZlXCIpO30pO2MucG9wKCk7fXQuYihcIlxcXCIgdGl0bGU9XFxcIlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hY2NvdW50LmRlYnVnX3Rvb2x0aXBcIixjLHAsMCkpKTt0LmIoXCJcXFwiPiBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUuYWNjb3VudC5kZWJ1Z1wiLGMscCwwKSkpO3QuYihcIiA8L2xpPjxsaSBpZD1cXFwiZWUtbWluaWdhbWVzLWVuYWJsZWRcXFwiIGNsYXNzPVxcXCJubC1idXR0b24gbmwtYnV0dG9uLXNtIFwiKTtpZih0LnModC5mKFwibWluaWdhbWVzXCIsYyxwLDEpLGMscCwwLDM4NiwzOTIsXCJ7eyB9fVwiKSl7dC5ycyhjLHAsZnVuY3Rpb24oYyxwLHQpe3QuYihcImFjdGl2ZVwiKTt9KTtjLnBvcCgpO310LmIoXCJcXFwiPiBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUuYWNjb3VudC5taW5pZ2FtZXNcIixjLHAsMCkpKTt0LmIoXCIgPC9saT48bGkgaWQ9XFxcImVlLWV4cGxvcmF0aW9ucy1lbmFibGVkXFxcIiBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbSBcIik7aWYodC5zKHQuZihcImV4cGxvcmF0aW9uc1wiLGMscCwxKSxjLHAsMCw1MjYsNTMyLFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCJhY3RpdmVcIik7fSk7Yy5wb3AoKTt9dC5iKFwiXFxcIj4gXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLmFjY291bnQuZXhwbG9yYXRpb25zXCIsYyxwLDApKSk7dC5iKFwiIDwvbGk+PGxpIGlkPVxcXCJlZS1tYXJrZXQtZW5hYmxlZFxcXCIgY2xhc3M9XFxcIm5sLWJ1dHRvbiBubC1idXR0b24tc20gXCIpO2lmKHQucyh0LmYoXCJtYXJrZXRcIixjLHAsMSksYyxwLDAsNjYwLDY2NixcInt7IH19XCIpKXt0LnJzKGMscCxmdW5jdGlvbihjLHAsdCl7dC5iKFwiYWN0aXZlXCIpO30pO2MucG9wKCk7fXQuYihcIlxcXCI+IFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hY2NvdW50Lm1hcmtldFwiLGMscCwwKSkpO3QuYihcIiA8L2xpPjxsaSBpZD1cXFwiZWUtaW1wb3J0XFxcIiBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbVxcXCI+IFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hY2NvdW50LmltcG9ydFwiLGMscCwwKSkpO3QuYihcIiA8L2xpPjxsaSBpZD1cXFwiZWUtZXhwb3J0XFxcIiBjbGFzcz1cXFwibmwtYnV0dG9uIG5sLWJ1dHRvbi1zbVxcXCI+IFwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5hY2NvdW50LmV4cG9ydFwiLGMscCwwKSkpO3QuYihcIiA8L2xpPjwvdWw+PC9kaXY+XCIpO3JldHVybiB0LmZsKCk7IH0scGFydGlhbHM6IHt9LCBzdWJzOiB7ICB9fSk7cmV0dXJuIFQ7IH0oKTsiLCJ2YXIgSCA9IHJlcXVpcmUoXCJob2dhbi5qc1wiKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7IHZhciBUID0gbmV3IEguVGVtcGxhdGUoe2NvZGU6IGZ1bmN0aW9uIChjLHAsaSkgeyB2YXIgdD10aGlzO3QuYihpPWl8fFwiXCIpO3QuYihcIjxhIGlkPVxcXCJ3aXNobGlzdC1idXR0b25cXFwiIGNsYXNzPVxcXCJubC1idXR0b25cXFwiPiBcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LnRpdGxlXCIsYyxwLDApKSk7dC5iKFwiIDwvYT5cIik7cmV0dXJuIHQuZmwoKTsgfSxwYXJ0aWFsczoge30sIHN1YnM6IHsgIH19KTtyZXR1cm4gVDsgfSgpOyIsInZhciBIID0gcmVxdWlyZShcImhvZ2FuLmpzXCIpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHsgdmFyIFQgPSBuZXcgSC5UZW1wbGF0ZSh7Y29kZTogZnVuY3Rpb24gKGMscCxpKSB7IHZhciB0PXRoaXM7dC5iKGk9aXx8XCJcIik7dC5iKFwiPHN0eWxlPnRhYmxlIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgdGV4dC1hbGlnbjogY2VudGVyO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB3aWR0aDogMTAwJTtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIH1cIik7dC5iKFwiXFxuXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAuYWN0aW9uLXBpY3RvIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgaGVpZ2h0OiA1MHB4O1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB3aWR0aDogNTBweDtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgY3Vyc29yOiBwb2ludGVyO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC5hY3Rpb24tcGljdG86aG92ZXI6bm90KC5kaXNhYmxlZCksXCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAuZWRpdC1wcmljZTpob3ZlciB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGFuaW1hdGlvbjogYnV0dG9uLWJvdW5jZSAzMDBtcyBsaW5lYXIgZm9yd2FyZHM7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGZpbHRlcjogYnJpZ2h0bmVzcygxLjA1KSBjb250cmFzdCgxLjEpO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC5lZGl0LXByaWNlIHtcIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgICAgY3Vyc29yOiBwb2ludGVyO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIGltZy5kaXNhYmxlZCB7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGZpbHRlcjogZ3JheXNjYWxlKDEpO1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgfVwiKTt0LmIoXCJcXG5cIik7dC5iKFwiXFxuXCIgKyBpKTt0LmIoXCIgIC5pdGVtLWljb24ge1wiKTt0LmIoXCJcXG5cIiArIGkpO3QuYihcIiAgICB3aWR0aDogMTAwcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICAgIGhlaWdodDogMTAwcHg7XCIpO3QuYihcIlxcblwiICsgaSk7dC5iKFwiICB9PC9zdHlsZT48dGFibGU+PHRoZWFkPjx0cj48dGg+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5pY29uXCIsYyxwLDApKSk7dC5iKFwiPC90aD48dGg+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5uYW1lXCIsYyxwLDApKSk7dC5iKFwiPC90aD48dGg+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5wcmljZVwiLGMscCwwKSkpO3QuYihcIjwvdGg+PHRoPlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3Quc3RhdHVzXCIsYyxwLDApKSk7dC5iKFwiPC90aD48dGg+XCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5hY3Rpb25zXCIsYyxwLDApKSk7dC5iKFwiPC90aD48L3RyPjwvdGhlYWQ+PHRib2R5PiBcIik7aWYodC5zKHQuZihcIndpc2hsaXN0XCIsYyxwLDEpLGMscCwwLDcyNywxNTU2LFwie3sgfX1cIikpe3QucnMoYyxwLGZ1bmN0aW9uKGMscCx0KXt0LmIoXCIgPHRyIGNsYXNzPVxcXCJtYXJrZXRwbGFjZS1hYnN0cmFjdFxcXCIgZGF0YS13ZWFyYWJsZWl0ZW1pZD1cXFwiXCIpO3QuYih0LnYodC5mKFwid2VhcmFibGVpdGVtaWRcIixjLHAsMCkpKTt0LmIoXCJcXFwiPjx0ZD48aW1nIGNsYXNzPVxcXCJpdGVtLWljb25cXFwiIHNyYz1cXFwiXCIpO3QuYih0LnYodC5mKFwiaWNvblwiLGMscCwwKSkpO3QuYihcIlxcXCIgYWx0PVxcXCJcIik7dC5iKHQudih0LmYoXCJuYW1lXCIsYyxwLDApKSk7dC5iKFwiXFxcIj48L3RkPjx0ZD48ZGl2IGNsYXNzPVxcXCJhYnN0cmFjdC1uYW1lXFxcIj5cIik7dC5iKHQudih0LmYoXCJuYW1lXCIsYyxwLDApKSk7dC5iKFwiPC9kaXY+PC90ZD48dGQ+PGRpdiBjbGFzcz1cXFwiZWRpdC1wcmljZVxcXCIgdGl0bGU9XFxcIlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QuY2hhbmdlX3ByaWNlXCIsYyxwLDApKSk7dC5iKFwiXFxcIj48c3BhbiBjbGFzcz1cXFwicHJpY2UtaXRlbVxcXCI+XCIpO3QuYih0LnYodC5mKFwicHJpY2VcIixjLHAsMCkpKTt0LmIoXCI8L3NwYW4+PHNwYW4gY2xhc3M9XFxcIm1hYW5hLWljb25cXFwiIGFsdD1cXFwibWFhbmFzXFxcIj48L3NwYW4+PC9kaXY+PC90ZD48dGQ+PHAgY2xhc3M9XFxcImVycm9yXFxcIj5cIik7dC5iKHQudih0LmYoXCJlcnJvclwiLGMscCwwKSkpO3QuYihcIjwvcD48L3RkPjx0ZD48aW1nIGNsYXNzPVxcXCJhY3Rpb24tcGljdG8gcmVzZXQtaXRlbS1zdGF0dXMgXCIpO2lmKCF0LnModC5mKFwiZXJyb3JcIixjLHAsMSksYyxwLDEsMCwwLFwiXCIpKXt0LmIoXCJkaXNhYmxlZFwiKTt9O3QuYihcIlxcXCIgc3JjPVxcXCIvc3RhdGljL2ltZy9uZXctbGF5b3V0L3dhcmRyb2JlL3Jlc2V0LWJ0bi5wbmdcXFwiIHRpdGxlPVxcXCJcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LnJlc2V0X3Rvb2x0aXBcIixjLHAsMCkpKTt0LmIoXCJcXFwiIGFsdD1cXFwiXCIpO3QuYih0LnYodC5kKFwidHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5yZXNldFwiLGMscCwwKSkpO3QuYihcIlxcXCI+IDxpbWcgY2xhc3M9XFxcImFjdGlvbi1waWN0byBkZWxldGUtd2lzaGxpc3QtaXRlbVxcXCIgc3JjPVxcXCIvc3RhdGljL2ltZy9uZXctbGF5b3V0L3dhcmRyb2JlL2RlbGV0ZS5wbmdcXFwiIHRpdGxlPVxcXCJcIik7dC5iKHQudih0LmQoXCJ0cmFuc2xhdGUubWFya2V0Lndpc2hsaXN0LmRlbGV0ZV90b29sdGlwXCIsYyxwLDApKSk7dC5iKFwiXFxcIiBhbHQ9XFxcIlwiKTt0LmIodC52KHQuZChcInRyYW5zbGF0ZS5tYXJrZXQud2lzaGxpc3QuZGVsZXRlXCIsYyxwLDApKSk7dC5iKFwiXFxcIj48L3RkPjwvdHI+IFwiKTt9KTtjLnBvcCgpO310LmIoXCIgPC90Ym9keT48L3RhYmxlPlwiKTtyZXR1cm4gdC5mbCgpOyB9LHBhcnRpYWxzOiB7fSwgc3ViczogeyAgfX0pO3JldHVybiBUOyB9KCk7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXShtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsImltcG9ydCB0eXBlIHsgVHJhbnNsYXRpb24gfSBmcm9tIFwiLi90cmFuc2xhdGlvblwiXG5cbmV4cG9ydCBjb25zdCBlbjogVHJhbnNsYXRpb24gPSB7XG4gIGhvbWU6IHtcbiAgICBmb3J1bTogXCJGb3J1bVwiLFxuICAgIHNjcmlwdF9sb2FkZWQ6IGAke0dNLmluZm8uc2NyaXB0Lm5hbWV9IHYke0dNLmluZm8uc2NyaXB0LnZlcnNpb259IGxvYWRlZC5gLFxuICAgIHRha2VvdmVyOiBcIlRha2VvdmVyXCIsXG4gIH0sXG4gIHRha2VvdmVyOiB7XG4gICAgYm91Z2h0OiAobmFtZSwgcHJpY2UpID0+XG4gICAgICBgQm91Z2h0IDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPiBmb3IgPHN0cm9uZyBjbGFzcz1cInByaWNlLWl0ZW1cIj4ke3ByaWNlfTwvc3Ryb25nPiA8c3BhbiBjbGFzcz1cIm1hYW5hLWljb25cIiBhbHQ9XCJtYWFuYXNcIj48L3NwYW4+LmAsXG4gICAgZGlzYWJsZWQ6IFwiVGFrZW92ZXIgbW9kZSBkaXNhYmxlZC5cIixcbiAgICBlbmFibGVkOiBcIlRha2VvdmVyIG1vZGUgZW5hYmxlZC4gUGxlYXNlIGRvIG5vdCBpbnRlcmFjdCB3aXRoIHRoaXMgdGFiLlwiLFxuICB9LFxuICBjYXJvdXNlbDoge1xuICAgIGJlZW1vb3ZfYW5ub3lhbmNlczoge1xuICAgICAgdGl0bGU6IFwiQmVlbW9vdiBBbm5veWFuY2VzXCIsXG4gICAgICBzdWJ0aXRsZTogXCJCbG9jayBzb21lIG9mIEVsZGFyeWEncyBhbm5veWFuY2VzLlwiLFxuICAgIH0sXG4gICAgZG93bmxvYWRfZmFjZToge1xuICAgICAgdGl0bGU6IFwiRG93bmxvYWQgeW91ciBndWFyZGlhbidzIGZhY2UhXCIsXG4gICAgICBzdWJ0aXRsZTogXCJDbGljayBoZXJlIHRvIGRvd25sb2FkIHlvdXIgZ3VhcmRpYW4ncyBmYWNlLlwiLFxuICAgIH0sXG4gICAgZG93bmxvYWRfZ3VhcmRpYW46IHtcbiAgICAgIHRpdGxlOiBcIkRvd25sb2FkIHlvdXIgZ3VhcmRpYW4hXCIsXG4gICAgICBzdWJ0aXRsZTogXCJDbGljayBoZXJlIHRvIGRvd25sb2FkIHlvdXIgZ3VhcmRpYW4uXCIsXG4gICAgfSxcbiAgICBlbGRhcnlhX2VuaGFuY2VtZW50czoge1xuICAgICAgdGl0bGU6IGAke0dNLmluZm8uc2NyaXB0Lm5hbWV9IHYke0dNLmluZm8uc2NyaXB0LnZlcnNpb259YCxcbiAgICAgIHN1YnRpdGxlOiBHTS5pbmZvLnNjcmlwdC5kZXNjcmlwdGlvbixcbiAgICB9LFxuICAgIHRha2VvdmVyOiB7XG4gICAgICBkaXNhYmxlX3Rha2VvdmVyOiBcIkRpc2FibGUgVGFrZW92ZXJcIixcbiAgICAgIGVuYWJsZV90YWtlb3ZlcjogXCJFbmFibGUgVGFrZW92ZXJcIixcbiAgICAgIHN1YnRpdGxlOiBcIkdpdmUgdXAgdGhpcyB0YWIgdG8gcGVyZm9ybSBhdXRvbWF0ZWQgYWN0aW9ucy5cIixcbiAgICAgIHRpdGxlOiBcIlRha2VvdmVyXCIsXG4gICAgfSxcbiAgfSxcbiAgbWluaWdhbWVzOiB7XG4gICAgcGxheWluZzogbmFtZSA9PiBgUGxheWluZyA8c3Ryb25nPiR7bmFtZX08L3N0cm9uZz4uLi5gLFxuICAgIHBsYXllZF9mb3I6IChuYW1lLCBtYWFuYXMpID0+XG4gICAgICBgUGxheWVkIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPiBmb3IgPHN0cm9uZyBjbGFzcz1cInByaWNlLWl0ZW1cIj4ke21hYW5hc308L3N0cm9uZz4gPHNwYW4gY2xhc3M9XCJtYWFuYS1pY29uXCIgYWx0PVwibWFhbmFzXCI+PC9zcGFuPiBlYXJuZWQuYCxcbiAgfSxcbiAgYXBwZWFyYW5jZToge1xuICAgIGJ1dHRvbnM6IHtcbiAgICAgIGJhY2t3YXJkOiBcIk1vdmUgYmFja1wiLFxuICAgICAgZm9yd2FyZDogXCJCcmluZyBmb3J3YXJkXCIsXG4gICAgfSxcbiAgICBmYXZvdXJpdGVzOiB7XG4gICAgICBpbXBvcnRlZDogXCJJbXBvcnRlZCBvdXRmaXQhXCIsXG4gICAgICBpbXBvcnRpbmc6IFwiSW1wb3J0aW5nIG91dGZpdC4gUGxlYXNlIHdhaXQuLi5cIixcbiAgICAgIGNsaWNrX291dGZpdDoge1xuICAgICAgICBkZWxldGU6IFwiRGVsZXRlXCIsXG4gICAgICAgIGdvdG9fYWNjb3VudDogYFRvIHRyYW5zZmVyIHlvdXIgPHN0cm9uZz4ke0dNLmluZm8uc2NyaXB0Lm5hbWV9PC9zdHJvbmc+IGZhdm91cml0ZXMgdG8gYW5vdGhlciBicm93c2VyLCBleHBvcnQgdGhlbSBpbiB0aGUgPGEgaHJlZj1cIi91c2VyL2FjY291bnRcIiBzdHlsZT1cInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wiPm15IGFjY291bnQ8L2E+IHBhZ2UuYCxcbiAgICAgICAgc2F2ZWRfbG9jYWxseTogYFRha2Ugbm90ZSB0aGF0IHRoaXMgb3V0Zml0IHdhcyBzYXZlZCBpbiA8c3Ryb25nPiR7R00uaW5mby5zY3JpcHQubmFtZX08L3N0cm9uZz4nIHNldHRpbmdzIGFuZCB3YXMgbm90IHNlbnQgdG8gRWxkYXJ5YSdzIHNlcnZlcnMuYCxcbiAgICAgICAgd2VhcjogXCJXZWFyXCIsXG4gICAgICB9LFxuICAgICAgc2F2ZV9vdXRmaXQ6IHtcbiAgICAgICAgZ290b19hY2NvdW50OiBgVG8gdHJhbnNmZXIgeW91ciA8c3Ryb25nPiR7R00uaW5mby5zY3JpcHQubmFtZX08L3N0cm9uZz4gZmF2b3VyaXRlcyB0byBhbm90aGVyIGJyb3dzZXIsIGV4cG9ydCB0aGVtIGluIHRoZSA8YSBocmVmPVwiL3VzZXIvYWNjb3VudFwiIHN0eWxlPVwidGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XCI+bXkgYWNjb3VudDwvYT4gcGFnZS5gLFxuICAgICAgICBwbGFjZWhvbGRlcjogXCJOYW1lLi4uXCIsXG4gICAgICAgIHNhdmU6IFwiU2F2ZVwiLFxuICAgICAgICBzYXZlZF9sb2NhbGx5OiBgVGFrZSBub3RlIHRoYXQgdGhpcyBvdXRmaXQgd2lsbCBvbmx5IGJlIHNhdmVkIHdpdGhpbiA8c3Ryb25nPiR7R00uaW5mby5zY3JpcHQubmFtZX08L3N0cm9uZz4nIHNldHRpbmdzIGFuZCB3aWxsIG5vdCBiZSBzZW50IHRvIEVsZGFyeWEncyBzZXJ2ZXJzLmAsXG4gICAgICAgIHRpdGxlOiBcIlNhdmUgb3V0Zml0XCIsXG4gICAgICB9LFxuICAgICAgYnV0dG9uczoge1xuICAgICAgICBkb3dubG9hZDogXCJEb3dubG9hZCBQTkdcIixcbiAgICAgICAgZXhwb3J0OiBcIkV4cG9ydFwiLFxuICAgICAgICBpbXBvcnQ6IFwiSW1wb3J0XCIsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG4gIG1hcmtldDoge1xuICAgIGFkZF90b193aXNobGlzdDoge1xuICAgICAgYWRkZWRfdG9fd2lzaGxpc3Q6IChuYW1lLCBwcmljZSkgPT5cbiAgICAgICAgYEFkZGVkIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPiBmb3IgPHN0cm9uZyBjbGFzcz1cInByaWNlLWl0ZW1cIj4ke3ByaWNlfTwvc3Ryb25nPiA8c3BhbiBjbGFzcz1cIm1hYW5hLWljb25cIiBhbHQ9XCJtYWFuYXNcIj48L3NwYW4+IHRvIHRoZSB3aXNobGlzdC5gLFxuICAgICAgaW52YWxpZF9wcmljZTogXCJUaGlzIGlzIG5vdCBhIHZhbGlkIHByaWNlLlwiLFxuICAgICAgc2F2ZTogXCJTYXZlXCIsXG4gICAgICB0ZXh0OiBcIkhvdyBtYW55IG1hYW5hcyBkbyB5b3Ugd2lzaCB0byBvZmZlciB0byBhY3F1aXJlIHRoaXMgaXRlbT9cIixcbiAgICAgIHRpdGxlOiBcIkFkZCB0byB3aXNobGlzdFwiLFxuICAgIH0sXG4gICAgYXVjdGlvbnM6IHtcbiAgICAgIGJ1eV9ub3dfcHJpY2U6IFwiQnV5IG5vdyBwcmljZSA6XCIsXG4gICAgICBjdXJyZW50X3ByaWNlOiBcIkN1cnJlbnQgcHJpY2UgOlwiLFxuICAgICAgZGVsZXRlOiBcIkRlbGV0ZVwiLFxuICAgICAgcHVyY2hhc2VfaGlzdG9yeTogXCJQdXJjaGFzZSBoaXN0b3J5XCIsXG4gICAgICBzYWxlc19oaXN0b3J5OiBcIlNhbGVzIGhpc3RvcnlcIixcbiAgICAgIGRhdGVfdGltZV9mb3JtYXQ6IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KFwiZW4tR0JcIiwge1xuICAgICAgICBtaW51dGU6IFwiMi1kaWdpdFwiLFxuICAgICAgICBob3VyOiBcIjItZGlnaXRcIixcbiAgICAgICAgZGF5OiBcIm51bWVyaWNcIixcbiAgICAgICAgbW9udGg6IFwibG9uZ1wiLFxuICAgICAgICB5ZWFyOiBcIm51bWVyaWNcIixcbiAgICAgIH0pLFxuICAgIH0sXG4gICAgY2hhbmdlX3ByaWNlOiB7XG4gICAgICBjaGFuZ2VkX3ByaWNlOiAobmFtZSwgcHJpY2UpID0+XG4gICAgICAgIGBDaGFuZ2VkIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPidzIHByaWNlIGZvciA8c3Ryb25nIGNsYXNzPVwicHJpY2UtaXRlbVwiPiR7cHJpY2V9PC9zdHJvbmc+IDxzcGFuIGNsYXNzPVwibWFhbmEtaWNvblwiIGFsdD1cIm1hYW5hc1wiPjwvc3Bhbj4uYCxcbiAgICAgIGludmFsaWRfcHJpY2U6IFwiVGhpcyBpcyBub3QgYSB2YWxpZCBwcmljZS5cIixcbiAgICAgIHNhdmU6IFwiU2F2ZVwiLFxuICAgICAgdGV4dDogXCJIb3cgbWFueSBtYWFuYXMgZG8geW91IHdpc2ggdG8gb2ZmZXIgdG8gYWNxdWlyZSB0aGlzIGl0ZW0/XCIsXG4gICAgICB0aXRsZTogXCJDaGFuZ2UgcHJpY2VcIixcbiAgICB9LFxuICAgIHdpc2hsaXN0OiB7XG4gICAgICBhc3Npc3RhbmNlOlxuICAgICAgICBcIk9uIHRoaXMgcGFnZSwgeW91IGNhbiBvcmdhbml6ZSB5b3VyIHdpc2hsaXN0IGFuZCBjaGVjayB0aGUgc3RhdHVzIG9mIHlvdXIgd2lzaGVkIGl0ZW1zLlwiLFxuICAgICAgYWN0aW9uczogXCJBY3Rpb25zXCIsXG4gICAgICBjaGFuZ2VfcHJpY2U6IFwiQ2hhbmdlIHByaWNlXCIsXG4gICAgICBkZWxldGVfdG9vbHRpcDogXCJSZW1vdmUgZnJvbSB3aXNobGlzdFwiLFxuICAgICAgZGVsZXRlOiBcIkRlbGV0ZVwiLFxuICAgICAgaWNvbjogXCJJY29uXCIsXG4gICAgICBuYW1lOiBcIk5hbWVcIixcbiAgICAgIHByaWNlOiBcIlByaWNlXCIsXG4gICAgICByZXNldF90b29sdGlwOiBcIlJlc2V0IHRoZSBlcnJvciBzdGF0dXNcIixcbiAgICAgIHJlc2V0OiBcIlJlc2V0XCIsXG4gICAgICBzdGF0dXM6IFwiU3RhdHVzXCIsXG4gICAgICB0aXRsZTogXCJXaXNobGlzdFwiLFxuICAgIH0sXG4gIH0sXG4gIGFjY291bnQ6IHtcbiAgICBkZWJ1Z190b29sdGlwOiBcIkVuYWJsZXMgb3IgZGlzYWJsZXMgbG9nZ2luZy5cIixcbiAgICBkZWJ1ZzogXCJEZWJ1Z1wiLFxuICAgIGVuaGFuY2VtZW50czogXCJFbmhhbmNlbWVudHNcIixcbiAgICBleHBsb3JhdGlvbnM6IFwiRXhwbG9yYXRpb25zXCIsXG4gICAgZXhwb3J0OiBcIkV4cG9ydCBzZXR0aW5nc1wiLFxuICAgIGltcG9ydDogXCJJbXBvcnQgc2V0dGluZ3NcIixcbiAgICBpbXBvcnRlZDogXCJJbXBvcnRlZCBzZXR0aW5ncyFcIixcbiAgICBtYXJrZXQ6IFwiTWFya2V0XCIsXG4gICAgbWluaWdhbWVzOiBcIk1pbmlnYW1lc1wiLFxuICB9LFxuICBwZXQ6IHtcbiAgICBhdXRvX2V4cGxvcmU6IFwiSGlnaGxpZ2h0XCIsXG4gIH0sXG4gIHByb2ZpbGU6IHtcbiAgICBleHBvcnRfb3V0Zml0OiBcIkV4cG9ydCBvdXRmaXRcIixcbiAgICBkb3dubG9hZF9vdXRmaXQ6IFwiRG93bmxvYWQgUE5HXCIsXG4gIH0sXG59XG5cbk9iamVjdC5mcmVlemUoZW4pXG4iLCJpbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9uIH0gZnJvbSBcIi4vdHJhbnNsYXRpb25cIlxuXG5leHBvcnQgY29uc3QgZnI6IFRyYW5zbGF0aW9uID0ge1xuICBob21lOiB7XG4gICAgZm9ydW06IFwiRm9ydW1cIixcbiAgICBzY3JpcHRfbG9hZGVkOiBgJHtHTS5pbmZvLnNjcmlwdC5uYW1lfSB2JHtHTS5pbmZvLnNjcmlwdC52ZXJzaW9ufSBjaGFyZ8OpLmAsXG4gICAgdGFrZW92ZXI6IFwiVGFrZW92ZXJcIixcbiAgfSxcbiAgdGFrZW92ZXI6IHtcbiAgICBib3VnaHQ6IChuYW1lLCBwcmljZSkgPT5cbiAgICAgIGBBY2hldMOpIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPiBwb3VyIDxzdHJvbmcgY2xhc3M9XCJwcmljZS1pdGVtXCI+JHtwcmljZX08L3N0cm9uZz4gPHNwYW4gY2xhc3M9XCJtYWFuYS1pY29uXCIgYWx0PVwibWFhbmFzXCI+PC9zcGFuPi5gLFxuICAgIGRpc2FibGVkOiBcIlRha2VvdmVyIGTDqXNhY3RpdsOpLlwiLFxuICAgIGVuYWJsZWQ6IFwiVGFrZW92ZXIgYWN0aXbDqS4gw4l2aXRlIGQnaW50w6lyYWdpciBhdmVjIGNldCBvbmdsZXQuXCIsXG4gIH0sXG4gIGNhcm91c2VsOiB7XG4gICAgYmVlbW9vdl9hbm5veWFuY2VzOiB7XG4gICAgICB0aXRsZTogXCJCZWVtb292IEFubm95YW5jZXNcIixcbiAgICAgIHN1YnRpdGxlOiBcIkJsb3F1ZSBjZXJ0YWlucyBpcnJpdGFudHMgZCdFbGRhcnlhLlwiLFxuICAgIH0sXG4gICAgZG93bmxvYWRfZmFjZToge1xuICAgICAgdGl0bGU6IFwiVMOpbMOpY2hhcmdlIGxlIHZpc2FnZSBkZSB0YSBnYXJkaWVubmUhXCIsXG4gICAgICBzdWJ0aXRsZTogXCJDbGlxdWUgaWNpIHBvdXIgdMOpbMOpY2hhcmdlciBsZSB2aXNhZ2UgZGUgdGEgZ2FyZGllbm5lLlwiLFxuICAgIH0sXG4gICAgZG93bmxvYWRfZ3VhcmRpYW46IHtcbiAgICAgIHRpdGxlOiBcIlTDqWzDqWNoYXJnZSB0YSBnYXJkaWVubmUhXCIsXG4gICAgICBzdWJ0aXRsZTogXCJDbGlxdWUgaWNpIHBvdXIgdMOpbMOpY2hhcmdlciB0YSBnYXJkaWVubmUuXCIsXG4gICAgfSxcbiAgICBlbGRhcnlhX2VuaGFuY2VtZW50czoge1xuICAgICAgdGl0bGU6IGAke0dNLmluZm8uc2NyaXB0Lm5hbWV9IHYke0dNLmluZm8uc2NyaXB0LnZlcnNpb259YCxcbiAgICAgIHN1YnRpdGxlOiBcIkFtw6lsaW9yZSBsJ2V4cMOpcmllbmNlIHV0aWxpc2F0ZXVyIGQnRWxkYXJ5YS5cIixcbiAgICB9LFxuICAgIHRha2VvdmVyOiB7XG4gICAgICBkaXNhYmxlX3Rha2VvdmVyOiBcIkTDqXNhY3RpdmUgbGUgdGFrZW92ZXJcIixcbiAgICAgIGVuYWJsZV90YWtlb3ZlcjogXCJBY3RpdmUgbGUgdGFrZW92ZXJcIixcbiAgICAgIHN1YnRpdGxlOiBcIkxhaXNzZSBjZXQgb25nbGV0IHBlcmZvcm1lciBkZXMgYWN0aW9ucyBhdXRvbWF0aXF1ZXMuXCIsXG4gICAgICB0aXRsZTogXCJUYWtlb3ZlclwiLFxuICAgIH0sXG4gIH0sXG4gIG1pbmlnYW1lczoge1xuICAgIHBsYXlpbmc6IChuYW1lOiBzdHJpbmcpID0+IGBKb3VlIMOgIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPi4uLmAsXG4gICAgcGxheWVkX2ZvcjogKG5hbWU6IHN0cmluZywgbWFhbmFzOiBudW1iZXIpID0+XG4gICAgICBgQSBqb3XDqSDDoCA8c3Ryb25nPiR7bmFtZX08L3N0cm9uZz4gcG91ciA8c3Ryb25nIGNsYXNzPVwicHJpY2UtaXRlbVwiPiR7bWFhbmFzfTwvc3Ryb25nPiA8c3BhbiBjbGFzcz1cIm1hYW5hLWljb25cIiBhbHQ9XCJtYWFuYXNcIj48L3NwYW4+IGdhZ27DqXMuYCxcbiAgfSxcbiAgYXBwZWFyYW5jZToge1xuICAgIGJ1dHRvbnM6IHtcbiAgICAgIGJhY2t3YXJkOiBcIlZlcnMgbCdhcnJpw6hyZVwiLFxuICAgICAgZm9yd2FyZDogXCJWZXJzIGwnYXZhbnRcIixcbiAgICB9LFxuICAgIGZhdm91cml0ZXM6IHtcbiAgICAgIGltcG9ydGVkOiBcIkltcG9ydGF0aW9uIHLDqXVzc2llIVwiLFxuICAgICAgaW1wb3J0aW5nOiBcIkltcG9ydGF0aW9uIGVuIGNvdXJzLi4uXCIsXG4gICAgICBjbGlja19vdXRmaXQ6IHtcbiAgICAgICAgZGVsZXRlOiBcIlN1cHByaW1lclwiLFxuICAgICAgICBnb3RvX2FjY291bnQ6IGBQb3VyIHRyYW5zZsOpcmVyIHRlcyBmYXZvcmlzIGQnPHN0cm9uZz4ke0dNLmluZm8uc2NyaXB0Lm5hbWV9PC9zdHJvbmc+IHZlcnMgdW4gYXV0cmUgbmF2aWdhdGV1ciwgZXhwb3J0ZS1sZXMgw6AgcGFydGlyIGRlIGxhIHBhZ2UgPGEgaHJlZj1cIi91c2VyL2FjY291bnRcIiBzdHlsZT1cInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wiPm1vbiBjb21wdGU8L2E+LmAsXG4gICAgICAgIHNhdmVkX2xvY2FsbHk6IGBQcmVuZHMgbm90ZSBxdWUgY2V0dGUgdGVudWUgYSDDqXTDqSBzYXV2ZWdhcmTDqWUgbG9jYWxlbWVudCBkYW5zIGxlcyBwYXJhbcOodHJlcyBkJzxzdHJvbmc+JHtHTS5pbmZvLnNjcmlwdC5uYW1lfTwvc3Ryb25nPiBldCBuJ2EgcGFzIMOpdMOpIGVudm95w6llIGF1eCBzZXJ2ZXVycyBkJ0VsZGFyeWEuYCxcbiAgICAgICAgd2VhcjogXCJQb3J0ZXJcIixcbiAgICAgIH0sXG4gICAgICBzYXZlX291dGZpdDoge1xuICAgICAgICBnb3RvX2FjY291bnQ6IGBQb3VyIHRyYW5zZsOpcmVyIHRlcyBmYXZvcmlzIGQnPHN0cm9uZz4ke0dNLmluZm8uc2NyaXB0Lm5hbWV9PC9zdHJvbmc+IHZlcnMgdW4gYXV0cmUgbmF2aWdhdGV1ciwgZXhwb3J0ZS1sZXMgw6AgcGFydGlyIGRlIGxhIHBhZ2UgPGEgaHJlZj1cIi91c2VyL2FjY291bnRcIiBzdHlsZT1cInRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1wiPm1vbiBjb21wdGU8L2E+LmAsXG4gICAgICAgIHBsYWNlaG9sZGVyOiBcIk5vbS4uLlwiLFxuICAgICAgICBzYXZlOiBcIlNhdXZlZ2FyZGVyXCIsXG4gICAgICAgIHNhdmVkX2xvY2FsbHk6IGBQcmVuZHMgbm90ZSBxdWUgY2V0dGUgdGVudWUgc2VyYSBzYXV2ZWdhcmTDqWUgbG9jYWxlbWVudCBkYW5zIGxlcyBwYXJhbcOodHJlcyBkJzxzdHJvbmc+JHtHTS5pbmZvLnNjcmlwdC5uYW1lfTwvc3Ryb25nPiBldCBuZSBzZXJhIHBhcyBlbnZvecOpZSBhdXggc2VydmV1cnMgZCdFbGRhcnlhLmAsXG4gICAgICAgIHRpdGxlOiBcIlNhdXZlZ2FyZGVyIGNldHRlIHRlbnVlXCIsXG4gICAgICB9LFxuICAgICAgYnV0dG9uczoge1xuICAgICAgICBkb3dubG9hZDogXCJUw6lsw6ljaGFyZ2VyIGxlIFBOR1wiLFxuICAgICAgICBleHBvcnQ6IFwiRXhwb3J0ZXJcIixcbiAgICAgICAgaW1wb3J0OiBcIkltcG9ydGVyXCIsXG4gICAgICB9LFxuICAgIH0sXG4gIH0sXG4gIG1hcmtldDoge1xuICAgIGFkZF90b193aXNobGlzdDoge1xuICAgICAgYWRkZWRfdG9fd2lzaGxpc3Q6IChuYW1lOiBzdHJpbmcsIHByaWNlOiBudW1iZXIpID0+XG4gICAgICAgIGBBam91dMOpIDxzdHJvbmc+JHtuYW1lfTwvc3Ryb25nPiBwb3VyIDxzdHJvbmcgY2xhc3M9XCJwcmljZS1pdGVtXCI+JHtwcmljZX08L3N0cm9uZz4gPHNwYW4gY2xhc3M9XCJtYWFuYS1pY29uXCIgYWx0PVwibWFhbmFzXCI+PC9zcGFuPiDDoCBsYSBsaXN0ZSBkZSBzb3VoYWl0cy5gLFxuICAgICAgaW52YWxpZF9wcmljZTogXCJDZSBwcml4IG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgICBzYXZlOiBcIlNhdXZlZ2FyZGVyXCIsXG4gICAgICB0ZXh0OiBcIkNvbWJpZW4gZGUgbWFhbmFzIHNvdWhhaXRlcy10dSBvZmZyaXIgcG91ciBhY3F1w6lyaXIgY2V0IGl0ZW0/XCIsXG4gICAgICB0aXRsZTogXCJBam91dGVyIMOgIGxhIGxpc3RlIGRlIHNvdWhhaXRcIixcbiAgICB9LFxuICAgIGF1Y3Rpb25zOiB7XG4gICAgICBidXlfbm93X3ByaWNlOiBcIkFjaGF0IGltbcOpZGlhdCA6XCIsXG4gICAgICBjdXJyZW50X3ByaWNlOiBcIk1pc2UgYWN0dWVsbGUgOlwiLFxuICAgICAgZGVsZXRlOiBcIlN1cHByaW1lclwiLFxuICAgICAgcHVyY2hhc2VfaGlzdG9yeTogXCJIaXN0b3JpcXVlIGQnYWNoYXRcIixcbiAgICAgIHNhbGVzX2hpc3Rvcnk6IFwiSGlzdG9yaXF1ZSBkZSB2ZW50ZVwiLFxuICAgICAgZGF0ZV90aW1lX2Zvcm1hdDogbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoXCJmci1DQVwiLCB7XG4gICAgICAgIG1pbnV0ZTogXCIyLWRpZ2l0XCIsXG4gICAgICAgIGhvdXI6IFwiMi1kaWdpdFwiLFxuICAgICAgICBkYXk6IFwibnVtZXJpY1wiLFxuICAgICAgICBtb250aDogXCJsb25nXCIsXG4gICAgICAgIHllYXI6IFwibnVtZXJpY1wiLFxuICAgICAgfSksXG4gICAgfSxcbiAgICBjaGFuZ2VfcHJpY2U6IHtcbiAgICAgIGNoYW5nZWRfcHJpY2U6IChuYW1lOiBzdHJpbmcsIHByaWNlOiBudW1iZXIpID0+XG4gICAgICAgIGBDaGFuZ8OpIGxlIHByaXggZGUgPHN0cm9uZz4ke25hbWV9PC9zdHJvbmc+IHBvdXIgPHN0cm9uZyBjbGFzcz1cInByaWNlLWl0ZW1cIj4ke3ByaWNlfTwvc3Ryb25nPiA8c3BhbiBjbGFzcz1cIm1hYW5hLWljb25cIiBhbHQ9XCJtYWFuYXNcIj48L3NwYW4+LmAsXG4gICAgICBpbnZhbGlkX3ByaWNlOiBcIkNlIHByaXggbidlc3QgcGFzIHZhbGlkZS5cIixcbiAgICAgIHNhdmU6IFwiU2F1dmVnYXJkZXJcIixcbiAgICAgIHRleHQ6IFwiQ29tYmllbiBkZSBtYWFuYXMgc291aGFpdGVzLXR1IG9mZnJpciBwb3VyIGFjcXXDqXJpciBjZXQgaXRlbT9cIixcbiAgICAgIHRpdGxlOiBcIkNoYW5nZXIgbGUgcHJpeFwiLFxuICAgIH0sXG4gICAgd2lzaGxpc3Q6IHtcbiAgICAgIGFzc2lzdGFuY2U6XG4gICAgICAgIFwiU3VyIGNldHRlIHBhZ2UsIHR1IHBldXggb3JnYW5pc2VyIHRhIGxpc3RlIGRlIHNvdWhhaXRzIGV0IHbDqXJpZmllciBsZSBzdGF0dXQgZGUgdGVzIGFydGljbGVzIHNvdWhhaXTDqXMuXCIsXG4gICAgICBhY3Rpb25zOiBcIkFjdGlvbnNcIixcbiAgICAgIGNoYW5nZV9wcmljZTogXCJDaGFuZ2VyIGxlIHByaXhcIixcbiAgICAgIGRlbGV0ZV90b29sdGlwOiBcIlJldGlyZXIgZGUgbGEgbGlzdGUgZGUgc291aGFpdHNcIixcbiAgICAgIGRlbGV0ZTogXCJTdXBwcmltZXJcIixcbiAgICAgIGljb246IFwiSWPDtG5lXCIsXG4gICAgICBuYW1lOiBcIk5vbVwiLFxuICAgICAgcHJpY2U6IFwiUHJpeFwiLFxuICAgICAgcmVzZXRfdG9vbHRpcDogXCJSw6lpbml0aWFsaXNlciBsJ8OpdGF0IGQnZXJyZXVyXCIsXG4gICAgICByZXNldDogXCJSw6lpbml0aWFsaXNlclwiLFxuICAgICAgc3RhdHVzOiBcIlN0YXR1dFwiLFxuICAgICAgdGl0bGU6IFwiTGlzdGUgZGUgc291aGFpdHNcIixcbiAgICB9LFxuICB9LFxuICBhY2NvdW50OiB7XG4gICAgZGVidWdfdG9vbHRpcDogXCJBY3RpdmUgb3UgZMOpc2FjdGl2ZSBsYSBqb3VybmFsaXNhdGlvbi5cIixcbiAgICBkZWJ1ZzogXCJEw6lib2dhZ2VcIixcbiAgICBlbmhhbmNlbWVudHM6IFwiQW3DqWxpb3JhdGlvbnNcIixcbiAgICBleHBsb3JhdGlvbnM6IFwiRXhwbG9yYXRpb25zXCIsXG4gICAgZXhwb3J0OiBcIkV4cG9ydGVyIGxlcyBwYXJhbcOodHJlc1wiLFxuICAgIGltcG9ydDogXCJJbXBvcnRlciBsZXMgcGFyYW3DqHRyZXNcIixcbiAgICBpbXBvcnRlZDogXCJQYXJhbcOodHJlcyBpbXBvcnTDqXNcIixcbiAgICBtYXJrZXQ6IFwiTWFyY2jDqVwiLFxuICAgIG1pbmlnYW1lczogXCJNaW5pLWpldXhcIixcbiAgfSxcbiAgcGV0OiB7XG4gICAgYXV0b19leHBsb3JlOiBcIk1hcnF1ZXJcIixcbiAgfSxcbiAgcHJvZmlsZToge1xuICAgIGV4cG9ydF9vdXRmaXQ6IFwiRXhwb3J0ZXIgbGEgdGVudWVcIixcbiAgICBkb3dubG9hZF9vdXRmaXQ6IFwiVMOpbMOpY2hhcmdlciBsZSBQTkdcIixcbiAgfSxcbn1cblxuT2JqZWN0LmZyZWV6ZShmcilcbiIsImltcG9ydCB7IGVuIH0gZnJvbSBcIi4vZW5cIlxuaW1wb3J0IHsgZnIgfSBmcm9tIFwiLi9mclwiXG5pbXBvcnQgdHlwZSB7IFRyYW5zbGF0aW9uIH0gZnJvbSBcIi4vdHJhbnNsYXRpb25cIlxuXG5mdW5jdGlvbiB0cmFuc2xhdGlvbigpOiBUcmFuc2xhdGlvbiB7XG4gIGlmIChsb2NhdGlvbi5ob3N0bmFtZS5lbmRzV2l0aChcIi5jb20uYnJcIikpIHJldHVybiBlblxuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIuZGVcIikpIHJldHVybiBlblxuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIuZXNcIikpIHJldHVybiBlblxuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIuaHVcIikpIHJldHVybiBlblxuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIuaXRcIikpIHJldHVybiBlblxuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIucGxcIikpIHJldHVybiBlblxuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIucnVcIikpIHJldHVybiBlblxuICBpZiAobG9jYXRpb24uaG9zdG5hbWUuZW5kc1dpdGgoXCIuY29tXCIpKSByZXR1cm4gZW5cbiAgaWYgKGxvY2F0aW9uLmhvc3RuYW1lLmVuZHNXaXRoKFwiLmZyXCIpKSByZXR1cm4gZnJcbiAgZWxzZSByZXR1cm4gZW5cbn1cblxuZXhwb3J0IGNvbnN0IHRyYW5zbGF0ZSA9IHRyYW5zbGF0aW9uKClcbiIsImV4cG9ydCBlbnVtIERhdGFiYXNlcyB7XG4gIGVsZGFyeWFfZW5oYW5jZW1lbnRzID0gXCJlbGRhcnlhX2VuaGFuY2VtZW50c1wiLFxufVxuIiwiZXhwb3J0IGVudW0gRmllbGRzIHtcbiAgYmxvYiA9IFwiYmxvYlwiLFxuICBpZCA9IFwiaWRcIixcbiAgaXRlbXMgPSBcIml0ZW1zXCIsXG4gIG5hbWUgPSBcIm5hbWVcIixcbn1cbiIsImV4cG9ydCBlbnVtIFRhYmxlcyB7XG4gIGZhdm91cml0ZV9vdXRmaXRzID0gXCJmYXZvdXJpdGVfb3V0Zml0c1wiLFxufVxuIiwiaW1wb3J0IHR5cGUgeyBGYXZvdXJpdGVPdXRmaXQgfSBmcm9tIFwiLi4vYXBwZWFyYW5jZS9pbnRlcmZhY2VzL2Zhdm91cml0ZV9vdXRmaXRcIlxuaW1wb3J0IHsgRGF0YWJhc2VzIH0gZnJvbSBcIi4vZGF0YWJhc2VzLmVudW1cIlxuaW1wb3J0IHsgRmllbGRzIH0gZnJvbSBcIi4vZmllbGRzLmVudW1cIlxuaW1wb3J0IHsgVGFibGVzIH0gZnJvbSBcIi4vdGFibGVzLmVudW1cIlxuXG5jbGFzcyBJbmRleGVkREIge1xuICBwcml2YXRlIGRiPzogSURCRGF0YWJhc2VcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gaW5kZXhlZERCLm9wZW4oRGF0YWJhc2VzLmVsZGFyeWFfZW5oYW5jZW1lbnRzLCAxKVxuICAgIHJlcXVlc3Qub25zdWNjZXNzID0gKCk6IElEQkRhdGFiYXNlID0+ICh0aGlzLmRiID0gcmVxdWVzdC5yZXN1bHQpXG4gICAgcmVxdWVzdC5vbnVwZ3JhZGVuZWVkZWQgPSBmdW5jdGlvbiAodGhpczogSURCT3BlbkRCUmVxdWVzdCk6IHZvaWQge1xuICAgICAgY29uc3QgZGI6IElEQkRhdGFiYXNlID0gdGhpcy5yZXN1bHRcblxuICAgICAgY29uc3Qgb2JqZWN0U3RvcmUgPSBkYi5jcmVhdGVPYmplY3RTdG9yZShUYWJsZXMuZmF2b3VyaXRlX291dGZpdHMsIHtcbiAgICAgICAga2V5UGF0aDogXCJpZFwiLFxuICAgICAgICBhdXRvSW5jcmVtZW50OiB0cnVlLFxuICAgICAgfSlcblxuICAgICAgb2JqZWN0U3RvcmUuY3JlYXRlSW5kZXgoRmllbGRzLmJsb2IsIFwiYmxvYlwiLCB7IHVuaXF1ZTogZmFsc2UgfSlcbiAgICAgIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KEZpZWxkcy5pdGVtcywgXCJpdGVtc1wiLCB7IHVuaXF1ZTogZmFsc2UgfSlcbiAgICAgIG9iamVjdFN0b3JlLmNyZWF0ZUluZGV4KEZpZWxkcy5uYW1lLCBcIm5hbWVcIiwgeyB1bmlxdWU6IGZhbHNlIH0pXG4gICAgfVxuICB9XG5cbiAgLyoqIEByZXR1cm5zIGEgbmV3IGBGYXZvdXJpdGVPdXRmaXRgIHdpdGggdGhlIGBrZXlgIHByb3BlcnR5IHNldC4gKi9cbiAgYXN5bmMgYWRkRmF2b3VyaXRlT3V0Zml0KFxuICAgIGZhdm91cml0ZTogRmF2b3VyaXRlT3V0Zml0XG4gICk6IFByb21pc2U8RmF2b3VyaXRlT3V0Zml0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHtcbiAgICAgIGlmICghdGhpcy5kYikgcmV0dXJuIHZvaWQgcmVqZWN0KClcblxuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuZGJcbiAgICAgICAgLnRyYW5zYWN0aW9uKFtUYWJsZXMuZmF2b3VyaXRlX291dGZpdHNdLCBcInJlYWR3cml0ZVwiKVxuICAgICAgICAub2JqZWN0U3RvcmUoVGFibGVzLmZhdm91cml0ZV9vdXRmaXRzKVxuICAgICAgICAuYWRkKGZhdm91cml0ZSlcblxuICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKTogdm9pZCA9PlxuICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAuLi5mYXZvdXJpdGUsXG4gICAgICAgICAgdXJsOiBmYXZvdXJpdGUudXJsID8/IFVSTC5jcmVhdGVPYmplY3RVUkwoZmF2b3VyaXRlLmJsb2IpLFxuICAgICAgICAgIGlkOiBOdW1iZXIocmVxdWVzdC5yZXN1bHQpLFxuICAgICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBhc3luYyBjbGVhckZhdm91cml0ZU91dGZpdHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHtcbiAgICAgIGlmICghdGhpcy5kYikgcmV0dXJuIHZvaWQgcmVqZWN0KClcblxuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuZGJcbiAgICAgICAgLnRyYW5zYWN0aW9uKFtUYWJsZXMuZmF2b3VyaXRlX291dGZpdHNdLCBcInJlYWR3cml0ZVwiKVxuICAgICAgICAub2JqZWN0U3RvcmUoVGFibGVzLmZhdm91cml0ZV9vdXRmaXRzKVxuICAgICAgICAuY2xlYXIoKVxuXG4gICAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9ICgpOiB2b2lkID0+IHJlc29sdmUoKVxuICAgIH0pXG4gIH1cblxuICBhc3luYyBkZWxldGVGYXZvdXJpdGVPdXRmaXQoZmF2b3VyaXRlOiBGYXZvdXJpdGVPdXRmaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKCF0aGlzLmRiKSByZXR1cm4gdm9pZCByZWplY3QoKVxuXG4gICAgICBjb25zdCByZXF1ZXN0ID0gdGhpcy5kYlxuICAgICAgICAudHJhbnNhY3Rpb24oW1RhYmxlcy5mYXZvdXJpdGVfb3V0Zml0c10sIFwicmVhZHdyaXRlXCIpXG4gICAgICAgIC5vYmplY3RTdG9yZShUYWJsZXMuZmF2b3VyaXRlX291dGZpdHMpXG4gICAgICAgIC5kZWxldGUoZmF2b3VyaXRlLmlkISlcblxuICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgICBpZiAoZmF2b3VyaXRlLnVybCkgVVJMLnJldm9rZU9iamVjdFVSTChmYXZvdXJpdGUudXJsKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBhc3luYyBnZXRGYXZvdXJpdGVPdXRmaXQoaWQ6IG51bWJlcik6IFByb21pc2U8RmF2b3VyaXRlT3V0Zml0PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpOiB2b2lkID0+IHtcbiAgICAgIGlmICghdGhpcy5kYikgcmV0dXJuIHZvaWQgcmVqZWN0KClcblxuICAgICAgY29uc3QgcmVxdWVzdCA9IHRoaXMuZGJcbiAgICAgICAgLnRyYW5zYWN0aW9uKFtUYWJsZXMuZmF2b3VyaXRlX291dGZpdHNdLCBcInJlYWRvbmx5XCIpXG4gICAgICAgIC5vYmplY3RTdG9yZShUYWJsZXMuZmF2b3VyaXRlX291dGZpdHMpXG4gICAgICAgIC5nZXQoaWQpXG5cbiAgICAgIGNvbnN0IGZhdm91cml0ZTogRmF2b3VyaXRlT3V0Zml0ID0gcmVxdWVzdC5yZXN1bHRcblxuICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKTogdm9pZCA9PlxuICAgICAgICByZXNvbHZlKHsgLi4uZmF2b3VyaXRlLCB1cmw6IFVSTC5jcmVhdGVPYmplY3RVUkwoZmF2b3VyaXRlLmJsb2IpIH0pXG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGdldEZhdm91cml0ZU91dGZpdHMoKTogUHJvbWlzZTxGYXZvdXJpdGVPdXRmaXRbXT4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KTogdm9pZCA9PiB7XG4gICAgICBpZiAoIXRoaXMuZGIpIHJldHVybiB2b2lkIHJlamVjdCgpXG5cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLmRiXG4gICAgICAgIC50cmFuc2FjdGlvbihbVGFibGVzLmZhdm91cml0ZV9vdXRmaXRzXSwgXCJyZWFkb25seVwiKVxuICAgICAgICAub2JqZWN0U3RvcmUoVGFibGVzLmZhdm91cml0ZV9vdXRmaXRzKVxuICAgICAgICAuZ2V0QWxsKClcblxuICAgICAgcmVxdWVzdC5vbnN1Y2Nlc3MgPSAoKTogdm9pZCA9PlxuICAgICAgICByZXNvbHZlKFxuICAgICAgICAgIHJlcXVlc3QucmVzdWx0Lm1hcDxGYXZvdXJpdGVPdXRmaXQ+KChmYXZvdXJpdGU6IEZhdm91cml0ZU91dGZpdCkgPT4gKHtcbiAgICAgICAgICAgIC4uLmZhdm91cml0ZSxcbiAgICAgICAgICAgIHVybDogVVJMLmNyZWF0ZU9iamVjdFVSTChmYXZvdXJpdGUuYmxvYiksXG4gICAgICAgICAgfSkpXG4gICAgICAgIClcbiAgICB9KVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBJbmRleGVkREIoKVxuIiwiaW1wb3J0IHR5cGUgeyBQYXJzYWJsZUl0ZW0gfSBmcm9tIFwiLi9hcHBlYXJhbmNlL2ludGVyZmFjZXMvcGFyc2FibGVfaXRlbVwiXG5pbXBvcnQgdHlwZSB7IEF2YXRhciB9IGZyb20gXCIuL2VsZGFyeWEvYXZhdGFyXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydE91dGZpdChzZWxlY3Rvcjogc3RyaW5nLCBuYW1lID0gXCJvdXRmaXRcIik6IHZvaWQge1xuICBjb25zdCBhdmF0YXIgPSBTYWNoYS5BdmF0YXIuYXZhdGFyc1tzZWxlY3Rvcl1cbiAgaWYgKCFhdmF0YXIpIHJldHVyblxuXG4gIGNvbnN0IG91dGZpdCA9IHBhcnNlQXZhdGFyKGF2YXRhcilcblxuICBjb25zdCBocmVmID1cbiAgICBcImRhdGE6dGV4dC9qc29uO2NoYXJzZXQ9dXRmLTgsXCIgK1xuICAgIGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShvdXRmaXQsIHVuZGVmaW5lZCwgMikpXG5cbiAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpXG4gIGEuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBocmVmKVxuICBhLnNldEF0dHJpYnV0ZShcImRvd25sb2FkXCIsIGAke25hbWV9Lmpzb25gKVxuICBhLmNsaWNrKClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQXZhdGFyKGF2YXRhcjogQXZhdGFyKTogUGFyc2FibGVJdGVtW10ge1xuICByZXR1cm4gYXZhdGFyLmNoaWxkcmVuLm1hcChjaGlsZCA9PiB7XG4gICAgY29uc3QgaXRlbSA9IGNoaWxkLmdldEl0ZW0oKVxuICAgIHJldHVybiB7XG4gICAgICBpZDogaXRlbS5faWQsXG4gICAgICBncm91cDogaXRlbS5fZ3JvdXAsXG4gICAgICBuYW1lOiBpdGVtLl9uYW1lLFxuICAgICAgaW1hZ2U6IGl0ZW0uX2ltYWdlLFxuICAgICAgdHlwZTogaXRlbS5fdHlwZSxcbiAgICAgIGNhdGVnb3J5SWQ6IGl0ZW0uX2NhdGVnb3J5SWQsXG4gICAgICBoaWRkZW5DYXRlZ29yaWVzOiBPYmplY3QudmFsdWVzKGl0ZW0uX2hpZGRlbkNhdGVnb3JpZXMpLFxuICAgICAgYW5pbWF0aW9uRGF0YTogaXRlbS5fYW5pbWF0aW9uRGF0YSxcbiAgICAgIGxvY2tlZDogaXRlbS5fbG9ja2VkLFxuICAgIH1cbiAgfSlcbn1cbiIsImltcG9ydCB0eXBlIHsgQXZhdGFyIH0gZnJvbSBcIi4uL2VsZGFyeWEvYXZhdGFyXCJcbmltcG9ydCB0eXBlIHsgSXRlbSB9IGZyb20gXCIuLi9lbGRhcnlhL2l0ZW1cIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IGV4cG9ydE91dGZpdCB9IGZyb20gXCIuLi9vdXRmaXRcIlxuaW1wb3J0IHR5cGUgeyBQYXJzYWJsZUl0ZW0gfSBmcm9tIFwiLi9pbnRlcmZhY2VzL3BhcnNhYmxlX2l0ZW1cIlxuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0UHJldmlldygpOiB2b2lkIHtcbiAgZXhwb3J0T3V0Zml0KFwiI2FwcGVhcmFuY2UtcHJldmlld1wiKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW1wb3J0T3V0Zml0KCk6IHZvaWQge1xuICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKVxuICBpbnB1dC5zZXRBdHRyaWJ1dGUoXCJ0eXBlXCIsIFwiZmlsZVwiKVxuICBpbnB1dC5zZXRBdHRyaWJ1dGUoXCJhY2NlcHRcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpXG4gIGlucHV0LmNsaWNrKClcblxuICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiaW5wdXRcIiwgZXZlbnQgPT4ge1xuICAgIGlmICghZXZlbnQudGFyZ2V0KSByZXR1cm5cbiAgICBjb25zdCBmaWxlcyA9ICg8SFRNTElucHV0RWxlbWVudD5ldmVudC50YXJnZXQpLmZpbGVzXG4gICAgaWYgKCFmaWxlcykgcmV0dXJuXG4gICAgY29uc3QgZmlsZSA9IGZpbGVzWzBdXG4gICAgaWYgKCFmaWxlKSByZXR1cm5cbiAgICB2b2lkIGZpbGUudGV4dCgpLnRoZW4oYXN5bmMgdmFsdWUgPT4ge1xuICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuXG5cbiAgICAgIGNvbnN0IG91dGZpdDogUGFyc2FibGVJdGVtW10gPSBKU09OLnBhcnNlKHZhbHVlKVxuICAgICAgY29uc3QgYXZhdGFyID0gU2FjaGEuQXZhdGFyLmF2YXRhcnNbXCIjYXBwZWFyYW5jZS1wcmV2aWV3XCJdXG4gICAgICBpZiAoIWF2YXRhcikgcmV0dXJuXG5cbiAgICAgIGF3YWl0IHdlYXJPdXRmaXQoYXZhdGFyLCBvdXRmaXQpXG4gICAgfSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gcmVtb3ZlQ2xvdGhlcygpOiB2b2lkIHtcbiAgY29uc3QgYXZhdGFyID0gU2FjaGEuQXZhdGFyLmF2YXRhcnNbXCIjYXBwZWFyYW5jZS1wcmV2aWV3XCJdXG4gIGlmICghYXZhdGFyKSByZXR1cm5cblxuICBmb3IgKGxldCBpID0gYXZhdGFyLmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgaXRlbVJlbmRlciA9IGF2YXRhci5jaGlsZHJlbltpXVxuICAgIGlmICghaXRlbVJlbmRlcikgY29udGludWVcblxuICAgIGNvbnN0IGl0ZW0gPSBpdGVtUmVuZGVyLmdldEl0ZW0oKVxuICAgIGlmIChTYWNoYS5BdmF0YXIucmVtb3ZlSXRlbUZyb21BbGxBdmF0YXJzKGl0ZW0pKSB7XG4gICAgICAkKGAjYXBwZWFyYW5jZS1pdGVtLSR7aXRlbS5faWR9YCkucmVtb3ZlQ2xhc3MoXCJzZWxlY3RlZFwiKVxuICAgIH1cbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBvcGVuR3JvdXAoZ3JvdXA6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI2FwcGVhcmFuY2UtaXRlbXMtZ3JvdXAtJHtncm91cH1gKSlcbiAgICAgIHJldHVybiB2b2lkIHJlc29sdmUoKVxuXG4gICAgdm9pZCAkLmdldChgL3BsYXllci9vcGVuR3JvdXAvJHtncm91cH1gLCAodmlldzogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAkKHZpZXcpLmhpZGUoKS5hcHBlbmRUbyhcIiNhcHBlYXJhbmNlLWl0ZW1zXCIpXG4gICAgfSkuYWx3YXlzKHJlc29sdmUpXG4gIH0pXG59XG5cbmFzeW5jIGZ1bmN0aW9uIG9wZW5DYXRlZ29yeShjYXRlZ29yeTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSk6IHZvaWQgPT4ge1xuICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS0ke2NhdGVnb3J5fWApKVxuICAgICAgcmV0dXJuIHZvaWQgcmVzb2x2ZSgpXG5cbiAgICB2b2lkICQucG9zdChgL3BsYXllci9vcGVuQ2F0ZWdvcnkvJHtjYXRlZ29yeX1gLCAodmlldzogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICAkKHZpZXcpLmhpZGUoKS5hcHBlbmRUbyhcIiNhcHBlYXJhbmNlLWl0ZW1zXCIpXG4gICAgfSkuYWx3YXlzKHJlc29sdmUpXG4gIH0pXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3ZWFyT3V0Zml0KFxuICBhdmF0YXI6IEF2YXRhcixcbiAgb3V0Zml0OiBQYXJzYWJsZUl0ZW1bXVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gICQuZmxhdnJOb3RpZih0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLmltcG9ydGluZylcblxuICAvLyBHZXQgYWxsIGNhdGVnb3JpZXNcbiAgY29uc3QgY2F0ZWdvcmllcyA9IG5ldyBTZXQ8c3RyaW5nPigpXG4gIGZvciAoY29uc3QgY2xvdGhpbmcgb2Ygb3V0Zml0KVxuICAgIGlmICghYXZhaWxhYmxlSXRlbXNbY2xvdGhpbmcuaWRdKSBjYXRlZ29yaWVzLmFkZChjbG90aGluZy50eXBlKVxuXG4gIC8vIE9wZW4gYWxsIGNhdGVnb3JpZXNcbiAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgQXJyYXkuZnJvbShjYXRlZ29yaWVzLnZhbHVlcygpKS5tYXAoYXN5bmMgY2F0ZWdvcnkgPT5cbiAgICAgIG9wZW5DYXRlZ29yeShjYXRlZ29yeSlcbiAgICApXG4gIClcblxuICAvLyBHZXQgYWxsIGdyb3Vwc1xuICBjb25zdCBncm91cHMgPSBuZXcgU2V0PG51bWJlcj4oKVxuICBmb3IgKGNvbnN0IGNsb3RoaW5nIG9mIG91dGZpdClcbiAgICBpZiAoXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ncm91cD1cIiR7Y2xvdGhpbmcuZ3JvdXB9XCJdYCkgJiZcbiAgICAgICFhdmFpbGFibGVJdGVtc1tjbG90aGluZy5pZF1cbiAgICApXG4gICAgICBncm91cHMuYWRkKGNsb3RoaW5nLmdyb3VwKVxuXG4gIC8vIE9wZW4gYWxsIGdyb3Vwc1xuICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKGdyb3Vwcy52YWx1ZXMoKSkubWFwKGFzeW5jIGdyb3VwID0+IG9wZW5Hcm91cChncm91cCkpXG4gIClcblxuICAvLyBHZXQgdGhlIGl0ZW1zIGZyb20gYGF2YWlsYWJsZUl0ZW1zYFxuICBjb25zdCB3b3JuSXRlbXM6IEl0ZW1bXSA9IFtdXG4gIGZvciAoY29uc3QgY2xvdGhpbmcgb2Ygb3V0Zml0KSB7XG4gICAgY29uc3QgaXRlbSA9IGF2YWlsYWJsZUl0ZW1zW2Nsb3RoaW5nLmlkXVxuICAgIGlmIChpdGVtKSB3b3JuSXRlbXMucHVzaChpdGVtKVxuICB9XG5cbiAgcmVtb3ZlQ2xvdGhlcygpXG4gIGF2YXRhci5hZGRJdGVtcyh3b3JuSXRlbXMpXG4gIGluaXRpYWxpemVTZWxlY3RlZEl0ZW1zKClcbiAgaW5pdGlhbGl6ZUhpZGRlbkNhdGVnb3JpZXMoKVxuXG4gIGNvbnN0IGF2YXRhckFjdGlvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImF2YXRhci1hY3Rpb25zXCIpXG4gIGlmIChhdmF0YXJBY3Rpb25zKSBhdmF0YXJBY3Rpb25zLnN0eWxlLmRpc3BsYXkgPSBcImluaXRpYWxcIlxuXG4gICQuZmxhdnJOb3RpZih0cmFuc2xhdGUuYXBwZWFyYW5jZS5mYXZvdXJpdGVzLmltcG9ydGVkKVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IGluZGV4ZWRfZGIgZnJvbSBcIi4uL2luZGV4ZWRfZGIvaW5kZXhlZF9kYlwiXG5pbXBvcnQgeyBwYXJzZUF2YXRhciB9IGZyb20gXCIuLi9vdXRmaXRcIlxuaW1wb3J0IHsgbG9hZEZha2VGYXZvdXJpdGVzIH0gZnJvbSBcIi4uL3VpL2Zhdm91cml0ZXNcIlxuaW1wb3J0IHsgd2Vhck91dGZpdCB9IGZyb20gXCIuL2Zhdm91cml0ZXNfYWN0aW9uc1wiXG5pbXBvcnQgdHlwZSB7IEZhdm91cml0ZU91dGZpdCB9IGZyb20gXCIuL2ludGVyZmFjZXMvZmF2b3VyaXRlX291dGZpdFwiXG5pbXBvcnQgdHlwZSB7IFBhcnNhYmxlSXRlbSB9IGZyb20gXCIuL2ludGVyZmFjZXMvcGFyc2FibGVfaXRlbVwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzYXZlRmF2b3VyaXRlKCk6IFByb21pc2U8RmF2b3VyaXRlT3V0Zml0IHwgbnVsbD4ge1xuICBjb25zdCBmYXZvdXJpdGUgPSBhd2FpdCBzaG93T3V0Zml0KClcbiAgaWYgKGZhdm91cml0ZSkgYXdhaXQgbG9hZEZha2VGYXZvdXJpdGVzKClcbiAgcmV0dXJuIGZhdm91cml0ZVxufVxuXG5hc3luYyBmdW5jdGlvbiBkZWxldGVGYXZvdXJpdGUoZmF2b3VyaXRlOiBGYXZvdXJpdGVPdXRmaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgaW5kZXhlZF9kYi5kZWxldGVGYXZvdXJpdGVPdXRmaXQoZmF2b3VyaXRlKVxuICBhd2FpdCBsb2FkRmFrZUZhdm91cml0ZXMoKVxufVxuXG5hc3luYyBmdW5jdGlvbiBzaG93T3V0Zml0KCk6IFByb21pc2U8RmF2b3VyaXRlT3V0Zml0IHwgbnVsbD4ge1xuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvY3JlYXRlZF9vdXRmaXRfZmxhdnIuaHRtbFwiKVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+XG4gICAgJC5mbGF2cih7XG4gICAgICBjb250ZW50OiB0ZW1wbGF0ZS5yZW5kZXIoeyB0cmFuc2xhdGUgfSksXG4gICAgICBvbkJ1aWxkOiAkY29udGFpbmVyID0+IHtcbiAgICAgICAgJGNvbnRhaW5lci5hZGRDbGFzcyhcIm5ldy1sYXlvdXQtcG9wdXBcIilcbiAgICAgICAgJGNvbnRhaW5lci5hZGRDbGFzcyhcImNyZWF0ZWQtb3V0Zml0LXBvcHVwXCIpXG5cbiAgICAgICAgY29uc3Qgc2F2ZUJ1dHRvbiA9XG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MQnV0dG9uRWxlbWVudD4oJ1tyZWw9XCJidG4tc2F2ZVwiXScpXG4gICAgICAgIGlmICghc2F2ZUJ1dHRvbikgcmV0dXJuXG5cbiAgICAgICAgZG9jdW1lbnRcbiAgICAgICAgICAucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcIiNjaG9vc2UtbmFtZVwiKVxuICAgICAgICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgIGlmIChldmVudC5rZXkgPT09IFwiRW50ZXJcIikgc2F2ZUJ1dHRvbi5jbGljaygpXG5cbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KFwiI2Nob29zZS1uYW1lXCIpPy52YWx1ZSlcbiAgICAgICAgICAgICAgc2F2ZUJ1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKFwiZGlzYWJsZWRcIilcbiAgICAgICAgICAgIGVsc2Ugc2F2ZUJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwiZGlzYWJsZWRcIilcbiAgICAgICAgICB9KVxuXG4gICAgICAgIHNhdmVCdXR0b24uY2xhc3NMaXN0LmFkZChcIm5sLWJ1dHRvblwiLCBcIm5sLWJ1dHRvbi1sZ1wiLCBcImRpc2FibGVkXCIpXG4gICAgICB9LFxuICAgICAgYnV0dG9uczoge1xuICAgICAgICBjbG9zZToge1xuICAgICAgICAgIHRleHQ6IFwiXCIsXG4gICAgICAgICAgc3R5bGU6IFwiY2xvc2VcIixcbiAgICAgICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2F2ZToge1xuICAgICAgICAgIHRleHQ6IHRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuc2F2ZV9vdXRmaXQuc2F2ZSxcbiAgICAgICAgICBzdHlsZTogXCJkZWZhdWx0XCIsXG4gICAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID1cbiAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcIiNjaG9vc2UtbmFtZVwiKT8udmFsdWVcbiAgICAgICAgICAgIGlmICghbmFtZSkgcmV0dXJuIGZhbHNlXG5cbiAgICAgICAgICAgIGNvbnN0IGF2YXRhciA9IFNhY2hhLkF2YXRhci5hdmF0YXJzW1wiI2FwcGVhcmFuY2UtcHJldmlld1wiXVxuICAgICAgICAgICAgaWYgKCFhdmF0YXIpIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBwYXJzZUF2YXRhcihhdmF0YXIpXG5cbiAgICAgICAgICAgIHZvaWQgc2F2ZUFjdGlvbihuYW1lLCBpdGVtcywgcmVzb2x2ZSlcbiAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSlcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2hvd0Zhdm91cml0ZShmYXZvdXJpdGU6IEZhdm91cml0ZU91dGZpdCk6IHZvaWQge1xuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvZmF2b3VyaXRlX291dGZpdF9mbGF2ci5odG1sXCIpXG5cbiAgJC5mbGF2cih7XG4gICAgY29udGVudDogdGVtcGxhdGUucmVuZGVyKHsgLi4uZmF2b3VyaXRlLCB0cmFuc2xhdGUgfSksXG4gICAgb25CdWlsZDogJGNvbnRhaW5lciA9PiB7XG4gICAgICAkY29udGFpbmVyLmFkZENsYXNzKFwibmV3LWxheW91dC1wb3B1cFwiKVxuICAgICAgJGNvbnRhaW5lci5hZGRDbGFzcyhcImNyZWF0ZWQtb3V0Zml0LXBvcHVwXCIpXG4gICAgfSxcbiAgICBidXR0b25zOiB7XG4gICAgICBjbG9zZToge1xuICAgICAgICB0ZXh0OiBcIlwiLFxuICAgICAgICBzdHlsZTogXCJjbG9zZVwiLFxuICAgICAgICBhY3Rpb246ICgpID0+IHRydWUsXG4gICAgICB9LFxuICAgICAgZGVsZXRlOiB7XG4gICAgICAgIHRleHQ6IHRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuY2xpY2tfb3V0Zml0LmRlbGV0ZSxcbiAgICAgICAgc3R5bGU6IFwiZGVmYXVsdFwiLFxuICAgICAgICBhY3Rpb246ICgpID0+IHtcbiAgICAgICAgICB2b2lkIGRlbGV0ZUZhdm91cml0ZShmYXZvdXJpdGUpXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB3ZWFyOiB7XG4gICAgICAgIHRleHQ6IHRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuY2xpY2tfb3V0Zml0LndlYXIsXG4gICAgICAgIHN0eWxlOiBcImRlZmF1bHRcIixcbiAgICAgICAgYWN0aW9uOiAoKSA9PiB7XG4gICAgICAgICAgY29uc3QgYXZhdGFyID0gU2FjaGEuQXZhdGFyLmF2YXRhcnNbXCIjYXBwZWFyYW5jZS1wcmV2aWV3XCJdXG4gICAgICAgICAgaWYgKCFhdmF0YXIpIHJldHVybiBmYWxzZVxuXG4gICAgICAgICAgdm9pZCAoYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT5cbiAgICAgICAgICAgIHdlYXJPdXRmaXQoYXZhdGFyLCBmYXZvdXJpdGUuaXRlbXMpKSgpXG5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9LFxuICB9KVxufVxuXG5hc3luYyBmdW5jdGlvbiBzYXZlQWN0aW9uKFxuICBuYW1lOiBzdHJpbmcsXG4gIGl0ZW1zOiBQYXJzYWJsZUl0ZW1bXSxcbiAgcmVzb2x2ZTogKHZhbHVlOiBGYXZvdXJpdGVPdXRmaXQpID0+IHZvaWRcbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBibG9iID0gYXdhaXQgbmV3IFByb21pc2U8QmxvYj4ocmVzb2x2ZSA9PiB7XG4gICAgZG9jdW1lbnRcbiAgICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxDYW52YXNFbGVtZW50PihcIiNhcHBlYXJhbmNlLXByZXZpZXcgY2FudmFzXCIpXG4gICAgICA/LnRvQmxvYihibG9iID0+IHJlc29sdmUoYmxvYiEpLCBcImltYWdlL3BuZ1wiLCAxKVxuICB9KVxuXG4gIHJlc29sdmUoe1xuICAgIC4uLihhd2FpdCBpbmRleGVkX2RiLmFkZEZhdm91cml0ZU91dGZpdCh7XG4gICAgICBpdGVtcyxcbiAgICAgIG5hbWUsXG4gICAgICBibG9iLFxuICAgIH0pKSxcbiAgICB1cmw6IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYiksXG4gIH0pXG59XG4iLCJmdW5jdGlvbiBkb3dubG9hZENhbnZhcyhjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50LCBuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgY2FudmFzLnRvQmxvYihcbiAgICBibG9iID0+IHtcbiAgICAgIGNvbnN0IHVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYilcblxuICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpXG4gICAgICBhLnNldEF0dHJpYnV0ZShcImhyZWZcIiwgdXJsKVxuICAgICAgYS5zZXRBdHRyaWJ1dGUoXCJkb3dubG9hZFwiLCBgJHtuYW1lfS5wbmdgKVxuICAgICAgYS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCJcblxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKVxuICAgICAgYS5jbGljaygpXG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpXG5cbiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKVxuICAgIH0sXG4gICAgXCJpbWFnZS9wbmdcIixcbiAgICAxXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkRmFjZSgpOiB2b2lkIHtcbiAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MQ2FudmFzRWxlbWVudD4oXG4gICAgXCIjYXZhdGFyLW1lbnUtY29udGFpbmVyIGNhbnZhc1wiXG4gIClcbiAgaWYgKCFjYW52YXMpIHtcbiAgICBjb25zb2xlLndhcm4oXCJDb3VsZG4ndCBmaW5kIHRoZSBndWFyZGlhbidzIGZhY2UuXCIpXG4gICAgcmV0dXJuXG4gIH1cblxuICBkb3dubG9hZENhbnZhcyhjYW52YXMsIFwiZmFjZVwiKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZG93bmxvYWRHdWFyZGlhbigpOiB2b2lkIHtcbiAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MQ2FudmFzRWxlbWVudD4oXG4gICAgXCIjaG9tZS1hdmF0YXItcGxheWVyIGNhbnZhc1wiXG4gIClcbiAgaWYgKCFjYW52YXMpIHtcbiAgICBjb25zb2xlLndhcm4oXCJDb3VsZG4ndCBmaW5kIHRoZSBndWFyZGlhbi5cIilcbiAgICByZXR1cm5cbiAgfVxuXG4gIGRvd25sb2FkQ2FudmFzKGNhbnZhcywgZ2V0TmFtZSgpID8/IFwiZ3VhcmRpYW5cIilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkQXBwZWFyYW5jZSgpOiB2b2lkIHtcbiAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MQ2FudmFzRWxlbWVudD4oXG4gICAgXCIjYXBwZWFyYW5jZS1wcmV2aWV3IGNhbnZhc1wiXG4gIClcbiAgaWYgKCFjYW52YXMpIHtcbiAgICBjb25zb2xlLndhcm4oXCJDb3VsZG4ndCBmaW5kIHRoZSBndWFyZGlhbi5cIilcbiAgICByZXR1cm5cbiAgfVxuXG4gIGRvd25sb2FkQ2FudmFzKGNhbnZhcywgZ2V0TmFtZSgpID8/IFwiZ3VhcmRpYW5cIilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRvd25sb2FkUHJvZmlsZSgpOiB2b2lkIHtcbiAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MQ2FudmFzRWxlbWVudD4oXG4gICAgXCIucGxheWVyUHJvZmlsZUF2YXRhciBjYW52YXNcIlxuICApXG4gIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSGVhZGluZ0VsZW1lbnQ+KFxuICAgIFwiI21haW4tc2VjdGlvbiAuc2VjdGlvbi10aXRsZVwiXG4gIClcbiAgaWYgKCFjYW52YXMgfHwgIXRpdGxlKSByZXR1cm5cblxuICBkb3dubG9hZENhbnZhcyhjYW52YXMsIHRpdGxlLnRleHRDb250ZW50Py50cmltKCkgPz8gXCJndWFyZGlhblwiKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TmFtZSgpOiBzdHJpbmcgfCBudWxsIHtcbiAgcmV0dXJuIChcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2F2YXRhci1tZW51LWNvbnRhaW5lci1vdXRlcj5wXCIpPy50ZXh0Q29udGVudCA/P1xuICAgIG51bGxcbiAgKVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyBzYXZlRmF2b3VyaXRlLCBzaG93RmF2b3VyaXRlIH0gZnJvbSBcIi4uL2FwcGVhcmFuY2UvZmFrZV9mYXZvdXJpdGVzXCJcbmltcG9ydCB7IGV4cG9ydFByZXZpZXcsIGltcG9ydE91dGZpdCB9IGZyb20gXCIuLi9hcHBlYXJhbmNlL2Zhdm91cml0ZXNfYWN0aW9uc1wiXG5pbXBvcnQgeyBkb3dubG9hZEFwcGVhcmFuY2UgfSBmcm9tIFwiLi4vZG93bmxvYWQtY2FudmFzXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgaW5kZXhlZF9kYiBmcm9tIFwiLi4vaW5kZXhlZF9kYi9pbmRleGVkX2RiXCJcbmltcG9ydCB0eXBlIHsgRmF2b3VyaXRlc0FjdGlvbiB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9mYXZvdXJpdGVzX2FjdGlvblwiXG5pbXBvcnQgdHlwZSB7IE91dGZpdFRodW1icyB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9vdXRmaXRfdGh1bWJcIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEZhdm91cml0ZXMoKTogdm9pZCB7XG4gIGxvYWRGYXZvdXJpdGVzQWN0aW9ucygpXG4gIHZvaWQgbG9hZEZha2VGYXZvdXJpdGVzKClcbn1cblxuZnVuY3Rpb24gbG9hZEZhdm91cml0ZXNBY3Rpb25zKCk6IHZvaWQge1xuICBjb25zdCBhY3Rpb25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJmYXZvcml0ZXMtYWN0aW9uc1wiKVxuICBpZiAoIWFjdGlvbnMgfHwgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5mYXZvcml0ZXMtYWN0aW9uLWVlXCIpKSByZXR1cm5cblxuICBjb25zdCBhY3Rpb25UZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvZmF2b3VyaXRlc19hY3Rpb24uaHRtbFwiKVxuXG4gIGNvbnN0IGltcG9ydEFjdGlvbjogRmF2b3VyaXRlc0FjdGlvbiA9IHtcbiAgICBpZDogXCJpbXBvcnQtb3V0Zml0XCIsXG4gICAgdGV4dDogdHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5idXR0b25zLmltcG9ydCxcbiAgfVxuICBjb25zdCBleHBvcnRBY3Rpb246IEZhdm91cml0ZXNBY3Rpb24gPSB7XG4gICAgaWQ6IFwiZXhwb3J0LW91dGZpdFwiLFxuICAgIHRleHQ6IHRyYW5zbGF0ZS5hcHBlYXJhbmNlLmZhdm91cml0ZXMuYnV0dG9ucy5leHBvcnQsXG4gIH1cbiAgY29uc3QgZG93bmxvYWRBY3Rpb246IEZhdm91cml0ZXNBY3Rpb24gPSB7XG4gICAgaWQ6IFwiZG93bmxvYWQtb3V0Zml0XCIsXG4gICAgdGV4dDogdHJhbnNsYXRlLmFwcGVhcmFuY2UuZmF2b3VyaXRlcy5idXR0b25zLmRvd25sb2FkLFxuICB9XG5cbiAgYWN0aW9ucy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICBhY3Rpb25UZW1wbGF0ZS5yZW5kZXIoaW1wb3J0QWN0aW9uKSArXG4gICAgICBhY3Rpb25UZW1wbGF0ZS5yZW5kZXIoZXhwb3J0QWN0aW9uKSArXG4gICAgICBhY3Rpb25UZW1wbGF0ZS5yZW5kZXIoZG93bmxvYWRBY3Rpb24pXG4gIClcblxuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChpbXBvcnRBY3Rpb24uaWQpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgaW1wb3J0T3V0Zml0KVxuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKGV4cG9ydEFjdGlvbi5pZClcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBleHBvcnRQcmV2aWV3KVxuXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKGRvd25sb2FkQWN0aW9uLmlkKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGRvd25sb2FkQXBwZWFyYW5jZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRGYWtlRmF2b3VyaXRlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgdGh1bWJzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhbGwtb3V0Zml0LXRodW1icyAubUNTQl9jb250YWluZXJcIilcbiAgaWYgKCF0aHVtYnMpIHJldHVyblxuXG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9vdXRmaXRfdGh1bWJzLmh0bWxcIilcblxuICBjb25zdCBmYXZvdXJpdGVzID0gYXdhaXQgaW5kZXhlZF9kYi5nZXRGYXZvdXJpdGVPdXRmaXRzKClcblxuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2VlLW91dGZpdC10aHVtYnNcIik/LnJlbW92ZSgpXG4gIHRodW1icy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICB0ZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgb3V0Zml0czogZmF2b3VyaXRlcyxcbiAgICB9IGFzIE91dGZpdFRodW1icylcbiAgKVxuXG4gIGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCIuZWUtYXZhaWxhYmxlLXNsb3RcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKTogdm9pZCA9PiB2b2lkIHNhdmVGYXZvdXJpdGUoKSlcblxuICBmb3IgKGNvbnN0IGRpdiBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxEaXZFbGVtZW50PihcbiAgICBcIi5lZS1vdXRmaXQtdGh1bWJcIlxuICApKSB7XG4gICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBjb25zdCBmYXZvdXJpdGUgPSBmYXZvdXJpdGVzLmZpbmQoXG4gICAgICAgIGZhdm91cml0ZSA9PiBmYXZvdXJpdGUuaWQgPT09IE51bWJlcihkaXYuZGF0YXNldC5hcnJheUluZGV4KVxuICAgICAgKVxuICAgICAgaWYgKCFmYXZvdXJpdGUpIHJldHVyblxuXG4gICAgICBzaG93RmF2b3VyaXRlKGZhdm91cml0ZSlcbiAgICB9KVxuICB9XG59XG4iLCJpbXBvcnQgdHlwZSB7IEl0ZW0gfSBmcm9tIFwiLi4vZWxkYXJ5YS9pdGVtXCJcbmltcG9ydCB0eXBlIHsgQXBwZWFyYW5jZUNhdGVnb3J5IH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2FwcGVhcmFuY2VfY2F0ZWdvcnlcIlxuaW1wb3J0IHR5cGUgeyBBcHBlYXJhbmNlR3JvdXAgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvYXBwZWFyYW5jZV9ncm91cFwiXG5pbXBvcnQgdHlwZSB7IEFwcGVhcmFuY2VJdGVtIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2FwcGVhcmFuY2VfaXRlbVwiXG5cbmNsYXNzIFdhcmRyb2JlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBjYXRlZ29yaWVzOiBSZWNvcmQ8bnVtYmVyLCBBcHBlYXJhbmNlQ2F0ZWdvcnk+ID0ge31cblxuICBwcml2YXRlIHJlYWRvbmx5IGdyb3VwczogUmVjb3JkPG51bWJlciwgQXBwZWFyYW5jZUdyb3VwPiA9IHt9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpdGVtczogUmVjb3JkPG51bWJlciwgQXBwZWFyYW5jZUl0ZW0+ID0ge31cblxuICBhdmFpbGFibGVJdGVtcz86IFJlY29yZDxudW1iZXIsIEl0ZW0+XG5cbiAgZ2V0Q2F0ZWdvcmllcygpOiBBcHBlYXJhbmNlQ2F0ZWdvcnlbXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5jYXRlZ29yaWVzKVxuICB9XG5cbiAgZ2V0Q2F0ZWdvcnkoaWQ6IG51bWJlcik6IEFwcGVhcmFuY2VDYXRlZ29yeSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuY2F0ZWdvcmllc1tpZF1cbiAgfVxuXG4gIGdldENhdGVnb3J5R3JvdXBzKGNhdGVnb3J5aWQ6IG51bWJlcik6IEFwcGVhcmFuY2VHcm91cFtdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLmdyb3VwcykuZmlsdGVyKFxuICAgICAgZ3JvdXAgPT4gZ3JvdXAuY2F0ZWdvcnlpZCA9PT0gY2F0ZWdvcnlpZFxuICAgIClcbiAgfVxuXG4gIGdldEdyb3VwKGlkOiBudW1iZXIpOiBBcHBlYXJhbmNlR3JvdXAgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdyb3Vwc1tpZF1cbiAgfVxuXG4gIGdldEdyb3VwcygpOiBBcHBlYXJhbmNlR3JvdXBbXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5ncm91cHMpXG4gIH1cblxuICBnZXRJdGVtKGlkOiBudW1iZXIpOiBBcHBlYXJhbmNlSXRlbSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuaXRlbXNbaWRdXG4gIH1cblxuICBnZXRJdGVtcyhncm91cDogbnVtYmVyKTogQXBwZWFyYW5jZUl0ZW1bXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5pdGVtcykuZmlsdGVyKGl0ZW0gPT4gaXRlbS5ncm91cCA9PT0gZ3JvdXApXG4gIH1cblxuICBzZXRDYXRlZ29yeShjYXRlZ29yeTogQXBwZWFyYW5jZUNhdGVnb3J5KTogdm9pZCB7XG4gICAgdGhpcy5jYXRlZ29yaWVzW2NhdGVnb3J5LmNhdGVnb3J5aWRdID0gY2F0ZWdvcnlcbiAgfVxuXG4gIHNldEdyb3VwKGdyb3VwOiBBcHBlYXJhbmNlR3JvdXApOiB2b2lkIHtcbiAgICB0aGlzLmdyb3Vwc1tncm91cC5ncm91cF0gPSBncm91cFxuICB9XG5cbiAgc2V0SXRlbShpdGVtOiBBcHBlYXJhbmNlSXRlbSk6IHZvaWQge1xuICAgIHRoaXMuaXRlbXNbaXRlbS5pdGVtaWRdID0gaXRlbVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBXYXJkcm9iZSgpXG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBsb2FkRmF2b3VyaXRlcyB9IGZyb20gXCIuLi91aS9mYXZvdXJpdGVzXCJcbmltcG9ydCB7IGxvYWRBcHBlYXJhbmNlVUkgfSBmcm9tIFwiLi9hcHBlYXJhbmNlX3VpXCJcbmltcG9ydCB3YXJkcm9iZSBmcm9tIFwiLi93YXJkcm9iZVwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRHJlc3NpbmdFeHBlcmllbmNlKCk6IHZvaWQge1xuICBpZiAoIWxvY2F0aW9uLnBhdGhuYW1lLnN0YXJ0c1dpdGgoXCIvcGxheWVyL2FwcGVhcmFuY2VcIikpIHJldHVyblxuICBsb2FkQXBwZWFyYW5jZVVJKClcblxuICAvLyBTZXR1cCBjYXRlZ29yaWVzXG4gIGZvciAoY29uc3QgbGkgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MTElFbGVtZW50PihcbiAgICBcIiN3YXJkcm9iZS1tZW51PmxpLCAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yaWVzIGxpXCJcbiAgKSkge1xuICAgIGNvbnN0IHsgY2F0ZWdvcnkgfSA9IGxpLmRhdGFzZXRcbiAgICBpZiAoIWNhdGVnb3J5KSBjb250aW51ZVxuXG4gICAgc3dpdGNoIChjYXRlZ29yeSkge1xuICAgICAgY2FzZSBcImJhY2tncm91bmRcIjpcbiAgICAgICAgbGkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+XG4gICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlZS1jYXRlZ29yeVwiKT8ucmVtb3ZlKClcbiAgICAgICAgKVxuICAgICAgICBjb250aW51ZVxuICAgICAgY2FzZSBcImZhdm9yaXRlc1wiOlxuICAgICAgICBsaS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZWUtY2F0ZWdvcnlcIik/LnJlbW92ZSgpXG4gICAgICAgICAgaGFuZGxlQ2F0ZWdvcnkoY2F0ZWdvcnkpXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICBjYXNlIFwiYXR0aWNcIjpcbiAgICAgICAgY29udGludWVcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGxpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgICAgZG9jdW1lbnRcbiAgICAgICAgICAgIC5nZXRFbGVtZW50QnlJZChcImFwcGVhcmFuY2UtaXRlbXMtY2F0ZWdvcnktZmF2b3JpdGVzXCIpXG4gICAgICAgICAgICA/LnJlbW92ZSgpXG4gICAgICAgICAgaGFuZGxlQ2F0ZWdvcnkoY2F0ZWdvcnkpXG4gICAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbi8qKiBHZXQgdGhlIGNhdGVnb3J5IGNvbnRhaW5lciBmb3IgdGhlIGNsaWNrZWQgY2F0ZWdvcnkgYW5kIGxvYWQgaXRzIGdyb3VwcyAqL1xuZnVuY3Rpb24gaGFuZGxlQ2F0ZWdvcnkoY2F0ZWdvcnk6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBhcHBlYXJhbmNlSXRlbXMgPVxuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiI2FwcGVhcmFuY2UtaXRlbXNcIilcbiAgaWYgKCFhcHBlYXJhbmNlSXRlbXMpIHJldHVyblxuXG4gIGNvbnN0IG9sZENhdENvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgIGAjYXBwZWFyYW5jZS1pdGVtcy1jYXRlZ29yeS0ke2NhdGVnb3J5fWBcbiAgKVxuICBpZiAob2xkQ2F0Q29udGFpbmVyKSB7XG4gICAgaWYgKGNhdGVnb3J5ID09PSBcImZhdm9yaXRlc1wiKSBsb2FkRmF2b3VyaXRlcygpXG4gICAgZWxzZSB2b2lkIGhhbmRsZUdyb3VwcyhhcHBlYXJhbmNlSXRlbXMsIG9sZENhdENvbnRhaW5lcilcbiAgICByZXR1cm5cbiAgfVxuXG4gIG5ldyBNdXRhdGlvbk9ic2VydmVyKChfLCBvYnNlcnZlcikgPT4ge1xuICAgIGNvbnN0IG5ld0NhdENvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgICAgYCNhcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5LSR7Y2F0ZWdvcnl9YFxuICAgIClcbiAgICBpZiAoIW5ld0NhdENvbnRhaW5lcikgcmV0dXJuXG4gICAgb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG5cbiAgICBpZiAoY2F0ZWdvcnkgPT09IFwiZmF2b3JpdGVzXCIpIGxvYWRGYXZvdXJpdGVzKClcbiAgICBlbHNlIHZvaWQgaGFuZGxlR3JvdXBzKGFwcGVhcmFuY2VJdGVtcywgbmV3Q2F0Q29udGFpbmVyKVxuICB9KS5vYnNlcnZlKGFwcGVhcmFuY2VJdGVtcywgeyBjaGlsZExpc3Q6IHRydWUgfSlcbn1cblxuLyoqIExvYWQgZWFjaCBncm91cHMgc3luY2hyb25vdXNseSBhbmQgYWRkIHRoZW0gdG8gYSBjdXN0b20gY29udGFpbmVyLiAqL1xuYXN5bmMgZnVuY3Rpb24gaGFuZGxlR3JvdXBzKFxuICBhcHBlYXJhbmNlSXRlbXM6IEhUTUxEaXZFbGVtZW50LFxuICBjYXRlZ29yeUNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnRcbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMjIwKSlcblxuICAvLyBHZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgY2F0ZWdvcnlcbiAgY29uc3QgeyBjYXRlZ29yeSwgY2F0ZWdvcnlpZCwgY2F0ZWdvcnluYW1lIH0gPSBjYXRlZ29yeUNvbnRhaW5lci5kYXRhc2V0XG4gIGlmICghY2F0ZWdvcnkgfHwgIWNhdGVnb3J5aWQgfHwgIWNhdGVnb3J5bmFtZSkgcmV0dXJuXG4gIHdhcmRyb2JlLnNldENhdGVnb3J5KHtcbiAgICBjYXRlZ29yeSxcbiAgICBjYXRlZ29yeWlkOiBOdW1iZXIoY2F0ZWdvcnlpZCksXG4gICAgY2F0ZWdvcnluYW1lLFxuICB9KVxuICBjYXRlZ29yeUNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKFwiYWN0aXZlXCIpXG4gIGNhdGVnb3J5Q29udGFpbmVyLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIlxuXG4gIC8vIFNldHVwIGFwcGVhcmFuY2VfaXRlbXNfY2F0ZWdvcnlcbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2FwcGVhcmFuY2VfaXRlbXNfY2F0ZWdvcnkuaHRtbFwiKVxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImVlLWNhdGVnb3J5XCIpPy5yZW1vdmUoKVxuICBhcHBlYXJhbmNlSXRlbXMuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgdGVtcGxhdGUucmVuZGVyKHsgY2F0ZWdvcnksIGNhdGVnb3J5aWQsIHRyYW5zbGF0ZSB9KVxuICApXG4gIGNvbnN0IGVlSXRlbXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2VlLWl0ZW1zXCIpXG4gIGlmICghZWVJdGVtcykgcmV0dXJuXG5cbiAgbG9hZEhpZGRlbkNhdGVnb3J5KGNhdGVnb3J5KVxuICBmb3IgKGNvbnN0IGxpIG9mIGNhdGVnb3J5Q29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTExJRWxlbWVudD4oXG4gICAgXCJsaS5hcHBlYXJhbmNlLWl0ZW0tZ3JvdXBcIlxuICApKSB7XG4gICAgY29uc3QgeyBncm91cCB9ID0gbGkuZGF0YXNldFxuICAgIHdhcmRyb2JlLnNldEdyb3VwKHtcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgY2F0ZWdvcnlpZDogTnVtYmVyKGNhdGVnb3J5aWQpLFxuICAgICAgZ3JvdXA6IE51bWJlcihncm91cCksXG4gICAgfSlcbiAgICBpZiAoIWdyb3VwKSBjb250aW51ZVxuXG4gICAgaWYgKFxuICAgICAgIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgICAgICBgI2FwcGVhcmFuY2UtaXRlbXMtZ3JvdXAtJHtncm91cH1gXG4gICAgICApXG4gICAgKVxuICAgICAgYXdhaXQgJC5nZXQoXCIvcGxheWVyL29wZW5Hcm91cC9cIiArIGdyb3VwLCB2aWV3ID0+XG4gICAgICAgIGFwcGVhcmFuY2VJdGVtcy5pbnNlcnRBZGphY2VudEhUTUwoXCJiZWZvcmVlbmRcIiwgdmlldylcbiAgICAgIClcblxuICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgICAgYCNhcHBlYXJhbmNlLWl0ZW1zLWdyb3VwLSR7Z3JvdXB9YFxuICAgIClcbiAgICBpZiAoIWRpdikgY29udGludWVcbiAgICBkaXYuY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKVxuXG4gICAgY29uc3Qgc2NyaXB0ID0gZGl2LnF1ZXJ5U2VsZWN0b3IoXCJzY3JpcHRcIikgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1pbXBsaWVkLWV2YWxcbiAgICBpZiAoc2NyaXB0KSBzZXRUaW1lb3V0KHNjcmlwdC5pbm5lckhUTUwsIDApXG5cbiAgICAvLyBDaGVjayBpZiB0aGUgY2F0ZWdvcnkgaXMgc3RpbGwgYWN0aXZlXG4gICAgaWYgKFxuICAgICAgIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgIGAjd2FyZHJvYmUtbWVudSBsaVtkYXRhLWNhdGVnb3J5PVwiJHtjYXRlZ29yeX1cIl0uYWN0aXZlYFxuICAgICAgKVxuICAgIClcbiAgICAgIGJyZWFrXG5cbiAgICBlZUl0ZW1zLmluc2VydEFkamFjZW50SFRNTChcbiAgICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgICBBcnJheS5mcm9tKGRpdi5xdWVyeVNlbGVjdG9yQWxsPEhUTUxMSUVsZW1lbnQ+KFwibGkuYXBwZWFyYW5jZS1pdGVtXCIpKVxuICAgICAgICAubWFwKGxpID0+IHtcbiAgICAgICAgICBsaS5kYXRhc2V0LmNhdGVnb3J5ID0gY2F0ZWdvcnlcbiAgICAgICAgICBsaS5kYXRhc2V0LmNhdGVnb3J5aWQgPSBjYXRlZ29yeWlkXG4gICAgICAgICAgbGkuZGF0YXNldC5ncm91cCA9IGdyb3VwXG5cbiAgICAgICAgICBjb25zdCBpY29uID0gbGkucXVlcnlTZWxlY3RvcihcImltZ1wiKT8uc3JjXG4gICAgICAgICAgaWYgKCFpY29uKSByZXR1cm4gbGkub3V0ZXJIVE1MXG5cbiAgICAgICAgICB3YXJkcm9iZS5zZXRJdGVtKHtcbiAgICAgICAgICAgIGdyb3VwOiBOdW1iZXIoZ3JvdXApLFxuICAgICAgICAgICAgaWNvbixcbiAgICAgICAgICAgIGl0ZW1pZDogTnVtYmVyKGxpLmRhdGFzZXQuaXRlbWlkKSxcbiAgICAgICAgICAgIG5hbWU6IGxpLmRhdGFzZXQubmFtZSA/PyBcIlwiLFxuICAgICAgICAgICAgcmFyaXR5OiBsaS5kYXRhc2V0LnJhcml0eSA/PyBcIlwiLFxuICAgICAgICAgICAgcmFyaXR5bmFtZTogbGkuZGF0YXNldC5yYXJpdHluYW1lID8/IFwiXCIsXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiBsaS5vdXRlckhUTUxcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCJcXG5cIilcbiAgICApXG5cbiAgICBpbml0aWFsaXplU2VsZWN0ZWRJdGVtcygpXG4gICAgaW5pdGlhbGl6ZUhpZGRlbkNhdGVnb3JpZXMoKVxuICAgIHdhcmRyb2JlLmF2YWlsYWJsZUl0ZW1zID0gYXZhaWxhYmxlSXRlbXNcbiAgfVxuXG4gIHVubG9hZEhpZGRlbkNhdGVnb3JpZXMoKVxufVxuXG5mdW5jdGlvbiB1bmxvYWRIaWRkZW5DYXRlZ29yaWVzKCk6IHZvaWQge1xuICBjb25zdCBoaWRkZW4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxEaXZFbGVtZW50PihcbiAgICBcIiNhcHBlYXJhbmNlLWl0ZW1zIC5hcHBlYXJhbmNlLWl0ZW1zLWNhdGVnb3J5Om5vdCguYWN0aXZlKTpub3QoW2RhdGEtY2F0ZWdvcnluYW1lXSksICNhcHBlYXJhbmNlLWl0ZW1zIHNjcmlwdFwiXG4gIClcbiAgZm9yIChjb25zdCBkaXYgb2YgaGlkZGVuKSB7XG4gICAgZGl2LnJlbW92ZSgpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRIaWRkZW5DYXRlZ29yeShjYXRlZ29yeTogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IGNhdGVnb3J5aWQgPSB3YXJkcm9iZVxuICAgIC5nZXRDYXRlZ29yaWVzKClcbiAgICAuZmluZChjID0+IGMuY2F0ZWdvcnkgPT09IGNhdGVnb3J5KT8uY2F0ZWdvcnlpZFxuICBpZiAoIWNhdGVnb3J5aWQpIHJldHVyblxuXG4gIGNvbnN0IGdyb3VwcyA9IHdhcmRyb2JlLmdldENhdGVnb3J5R3JvdXBzKGNhdGVnb3J5aWQpXG4gIGNvbnN0IGl0ZW1UZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvYXBwZWFyYW5jZV9pdGVtLmh0bWxcIilcbiAgY29uc3QgZ3JvdXBUZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvYXBwZWFyYW5jZV9pdGVtc19ncm91cC5odG1sXCIpXG5cbiAgZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIjYXBwZWFyYW5jZS1pdGVtc1wiKVxuICAgID8uaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgICAgXCJiZWZvcmVlbmRcIixcbiAgICAgIGdyb3Vwc1xuICAgICAgICAubWFwKGdyb3VwID0+XG4gICAgICAgICAgZ3JvdXBUZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgICBpdGVtczogd2FyZHJvYmVcbiAgICAgICAgICAgICAgLmdldEl0ZW1zKGdyb3VwLmdyb3VwKVxuICAgICAgICAgICAgICAubWFwKGl0ZW0gPT4gaXRlbVRlbXBsYXRlLnJlbmRlcihpdGVtKSlcbiAgICAgICAgICAgICAgLmpvaW4oXCJcXG5cIiksXG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICAuam9pbihcIlxcblwiKVxuICAgIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRIaWRkZW5Hcm91cChpZDogbnVtYmVyKTogdm9pZCB7XG4gIGNvbnN0IGdyb3VwID0gd2FyZHJvYmUuZ2V0R3JvdXAoaWQpXG4gIGlmICghZ3JvdXApIHJldHVyblxuXG4gIGNvbnN0IGl0ZW1UZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvYXBwZWFyYW5jZV9pdGVtLmh0bWxcIilcbiAgY29uc3QgZ3JvdXBUZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvYXBwZWFyYW5jZV9pdGVtc19ncm91cC5odG1sXCIpXG5cbiAgZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIjYXBwZWFyYW5jZS1pdGVtc1wiKVxuICAgID8uaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgICAgXCJiZWZvcmVlbmRcIixcbiAgICAgIGdyb3VwVGVtcGxhdGUucmVuZGVyKHtcbiAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgIGl0ZW1zOiB3YXJkcm9iZVxuICAgICAgICAgIC5nZXRJdGVtcyhncm91cC5ncm91cClcbiAgICAgICAgICAubWFwKGl0ZW0gPT4gaXRlbVRlbXBsYXRlLnJlbmRlcihpdGVtKSlcbiAgICAgICAgICAuam9pbihcIlxcblwiKSxcbiAgICAgIH0pXG4gICAgKVxufVxuIiwiLy8gVE9ETzogaW5jbHVkaW5nIHRoZXNlIGluIGJsb2ItdXRpbC50cyBjYXVzZXMgdHlwZWRvYyB0byBnZW5lcmF0ZSBkb2NzIGZvciB0aGVtLFxuLy8gZXZlbiB3aXRoIC0tZXhjbHVkZVByaXZhdGUgwq9cXF8o44OEKV8vwq9cbi8qKiBAcHJpdmF0ZSAqL1xuZnVuY3Rpb24gbG9hZEltYWdlKHNyYywgY3Jvc3NPcmlnaW4pIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgICAgIGlmIChjcm9zc09yaWdpbikge1xuICAgICAgICAgICAgaW1nLmNyb3NzT3JpZ2luID0gY3Jvc3NPcmlnaW47XG4gICAgICAgIH1cbiAgICAgICAgaW1nLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJlc29sdmUoaW1nKTtcbiAgICAgICAgfTtcbiAgICAgICAgaW1nLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgIGltZy5zcmMgPSBzcmM7XG4gICAgfSk7XG59XG4vKiogQHByaXZhdGUgKi9cbmZ1bmN0aW9uIGltZ1RvQ2FudmFzKGltZykge1xuICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjYW52YXMud2lkdGggPSBpbWcud2lkdGg7XG4gICAgY2FudmFzLmhlaWdodCA9IGltZy5oZWlnaHQ7XG4gICAgLy8gY29weSB0aGUgaW1hZ2UgY29udGVudHMgdG8gdGhlIGNhbnZhc1xuICAgIHZhciBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgY29udGV4dC5kcmF3SW1hZ2UoaW1nLCAwLCAwLCBpbWcud2lkdGgsIGltZy5oZWlnaHQsIDAsIDAsIGltZy53aWR0aCwgaW1nLmhlaWdodCk7XG4gICAgcmV0dXJuIGNhbnZhcztcbn1cblxuLyogZ2xvYmFsIFByb21pc2UsIEltYWdlLCBCbG9iLCBGaWxlUmVhZGVyLCBhdG9iLCBidG9hLFxuICAgQmxvYkJ1aWxkZXIsIE1TQmxvYkJ1aWxkZXIsIE1vekJsb2JCdWlsZGVyLCBXZWJLaXRCbG9iQnVpbGRlciwgd2Via2l0VVJMICovXG4vKipcbiAqIFNoaW0gZm9yXG4gKiBbYG5ldyBCbG9iKClgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQmxvYi5CbG9iKVxuICogdG8gc3VwcG9ydFxuICogW29sZGVyIGJyb3dzZXJzIHRoYXQgdXNlIHRoZSBkZXByZWNhdGVkIGBCbG9iQnVpbGRlcmAgQVBJXShodHRwOi8vY2FuaXVzZS5jb20vYmxvYikuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIG15QmxvYiA9IGJsb2JVdGlsLmNyZWF0ZUJsb2IoWydoZWxsbyB3b3JsZCddLCB7dHlwZTogJ3RleHQvcGxhaW4nfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gcGFydHMgLSBjb250ZW50IG9mIHRoZSBCbG9iXG4gKiBAcGFyYW0gcHJvcGVydGllcyAtIHVzdWFsbHkgYHt0eXBlOiBteUNvbnRlbnRUeXBlfWAsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHlvdSBjYW4gYWxzbyBwYXNzIGEgc3RyaW5nIGZvciB0aGUgY29udGVudCB0eXBlXG4gKiBAcmV0dXJucyBCbG9iXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJsb2IocGFydHMsIHByb3BlcnRpZXMpIHtcbiAgICBwYXJ0cyA9IHBhcnRzIHx8IFtdO1xuICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IHt9O1xuICAgIGlmICh0eXBlb2YgcHJvcGVydGllcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcHJvcGVydGllcyA9IHsgdHlwZTogcHJvcGVydGllcyB9OyAvLyBpbmZlciBjb250ZW50IHR5cGVcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iKHBhcnRzLCBwcm9wZXJ0aWVzKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUubmFtZSAhPT0gJ1R5cGVFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIEJ1aWxkZXIgPSB0eXBlb2YgQmxvYkJ1aWxkZXIgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICA/IEJsb2JCdWlsZGVyIDogdHlwZW9mIE1TQmxvYkJ1aWxkZXIgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICA/IE1TQmxvYkJ1aWxkZXIgOiB0eXBlb2YgTW96QmxvYkJ1aWxkZXIgIT09ICd1bmRlZmluZWQnXG4gICAgICAgICAgICA/IE1vekJsb2JCdWlsZGVyIDogV2ViS2l0QmxvYkJ1aWxkZXI7XG4gICAgICAgIHZhciBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQocGFydHNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBidWlsZGVyLmdldEJsb2IocHJvcGVydGllcy50eXBlKTtcbiAgICB9XG59XG4vKipcbiAqIFNoaW0gZm9yXG4gKiBbYFVSTC5jcmVhdGVPYmplY3RVUkwoKWBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9VUkwuY3JlYXRlT2JqZWN0VVJMKVxuICogdG8gc3VwcG9ydCBicm93c2VycyB0aGF0IG9ubHkgaGF2ZSB0aGUgcHJlZml4ZWRcbiAqIGB3ZWJraXRVUkxgIChlLmcuIEFuZHJvaWQgPDQuNCkuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIG15VXJsID0gYmxvYlV0aWwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGJsb2JcbiAqIEByZXR1cm5zIHVybFxuICovXG5mdW5jdGlvbiBjcmVhdGVPYmplY3RVUkwoYmxvYikge1xuICAgIHJldHVybiAodHlwZW9mIFVSTCAhPT0gJ3VuZGVmaW5lZCcgPyBVUkwgOiB3ZWJraXRVUkwpLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbn1cbi8qKlxuICogU2hpbSBmb3JcbiAqIFtgVVJMLnJldm9rZU9iamVjdFVSTCgpYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC5yZXZva2VPYmplY3RVUkwpXG4gKiB0byBzdXBwb3J0IGJyb3dzZXJzIHRoYXQgb25seSBoYXZlIHRoZSBwcmVmaXhlZFxuICogYHdlYmtpdFVSTGAgKGUuZy4gQW5kcm9pZCA8NC40KS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiBibG9iVXRpbC5yZXZva2VPYmplY3RVUkwobXlVcmwpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHVybFxuICovXG5mdW5jdGlvbiByZXZva2VPYmplY3RVUkwodXJsKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgVVJMICE9PSAndW5kZWZpbmVkJyA/IFVSTCA6IHdlYmtpdFVSTCkucmV2b2tlT2JqZWN0VVJMKHVybCk7XG59XG4vKipcbiAqIENvbnZlcnQgYSBgQmxvYmAgdG8gYSBiaW5hcnkgc3RyaW5nLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIGJsb2JVdGlsLmJsb2JUb0JpbmFyeVN0cmluZyhibG9iKS50aGVuKGZ1bmN0aW9uIChiaW5hcnlTdHJpbmcpIHtcbiAqICAgLy8gc3VjY2Vzc1xuICogfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICogICAvLyBlcnJvclxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYmxvYlxuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGJpbmFyeSBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gYmxvYlRvQmluYXJ5U3RyaW5nKGJsb2IpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICAgICAgdmFyIGhhc0JpbmFyeVN0cmluZyA9IHR5cGVvZiByZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nID09PSAnZnVuY3Rpb24nO1xuICAgICAgICByZWFkZXIub25sb2FkZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJlYWRlci5yZXN1bHQgfHwgJyc7XG4gICAgICAgICAgICBpZiAoaGFzQmluYXJ5U3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc29sdmUoYXJyYXlCdWZmZXJUb0JpbmFyeVN0cmluZyhyZXN1bHQpKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmVhZGVyLm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICAgIGlmIChoYXNCaW5hcnlTdHJpbmcpIHtcbiAgICAgICAgICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcoYmxvYik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoYmxvYik7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8qKlxuICogQ29udmVydCBhIGJhc2U2NC1lbmNvZGVkIHN0cmluZyB0byBhIGBCbG9iYC5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgYmxvYiA9IGJsb2JVdGlsLmJhc2U2NFN0cmluZ1RvQmxvYihiYXNlNjRTdHJpbmcpO1xuICogYGBgXG4gKiBAcGFyYW0gYmFzZTY0IC0gYmFzZTY0LWVuY29kZWQgc3RyaW5nXG4gKiBAcGFyYW0gdHlwZSAtIHRoZSBjb250ZW50IHR5cGUgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQmxvYlxuICovXG5mdW5jdGlvbiBiYXNlNjRTdHJpbmdUb0Jsb2IoYmFzZTY0LCB0eXBlKSB7XG4gICAgdmFyIHBhcnRzID0gW2JpbmFyeVN0cmluZ1RvQXJyYXlCdWZmZXIoYXRvYihiYXNlNjQpKV07XG4gICAgcmV0dXJuIHR5cGUgPyBjcmVhdGVCbG9iKHBhcnRzLCB7IHR5cGU6IHR5cGUgfSkgOiBjcmVhdGVCbG9iKHBhcnRzKTtcbn1cbi8qKlxuICogQ29udmVydCBhIGJpbmFyeSBzdHJpbmcgdG8gYSBgQmxvYmAuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGJsb2IgPSBibG9iVXRpbC5iaW5hcnlTdHJpbmdUb0Jsb2IoYmluYXJ5U3RyaW5nKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBiaW5hcnkgLSBiaW5hcnkgc3RyaW5nXG4gKiBAcGFyYW0gdHlwZSAtIHRoZSBjb250ZW50IHR5cGUgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQmxvYlxuICovXG5mdW5jdGlvbiBiaW5hcnlTdHJpbmdUb0Jsb2IoYmluYXJ5LCB0eXBlKSB7XG4gICAgcmV0dXJuIGJhc2U2NFN0cmluZ1RvQmxvYihidG9hKGJpbmFyeSksIHR5cGUpO1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgYEJsb2JgIHRvIGEgYmluYXJ5IHN0cmluZy5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiBibG9iVXRpbC5ibG9iVG9CYXNlNjRTdHJpbmcoYmxvYikudGhlbihmdW5jdGlvbiAoYmFzZTY0U3RyaW5nKSB7XG4gKiAgIC8vIHN1Y2Nlc3NcbiAqIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgLy8gZXJyb3JcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIGJsb2JcbiAqIEByZXR1cm5zIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBiaW5hcnkgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGJsb2JUb0Jhc2U2NFN0cmluZyhibG9iKSB7XG4gICAgcmV0dXJuIGJsb2JUb0JpbmFyeVN0cmluZyhibG9iKS50aGVuKGJ0b2EpO1xufVxuLyoqXG4gKiBDb252ZXJ0IGEgZGF0YSBVUkwgc3RyaW5nXG4gKiAoZS5nLiBgJ2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0cuLi4nYClcbiAqIHRvIGEgYEJsb2JgLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciBibG9iID0gYmxvYlV0aWwuZGF0YVVSTFRvQmxvYihkYXRhVVJMKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBkYXRhVVJMIC0gZGF0YVVSTC1lbmNvZGVkIHN0cmluZ1xuICogQHJldHVybnMgQmxvYlxuICovXG5mdW5jdGlvbiBkYXRhVVJMVG9CbG9iKGRhdGFVUkwpIHtcbiAgICB2YXIgdHlwZSA9IGRhdGFVUkwubWF0Y2goL2RhdGE6KFteO10rKS8pWzFdO1xuICAgIHZhciBiYXNlNjQgPSBkYXRhVVJMLnJlcGxhY2UoL15bXixdKywvLCAnJyk7XG4gICAgdmFyIGJ1ZmYgPSBiaW5hcnlTdHJpbmdUb0FycmF5QnVmZmVyKGF0b2IoYmFzZTY0KSk7XG4gICAgcmV0dXJuIGNyZWF0ZUJsb2IoW2J1ZmZdLCB7IHR5cGU6IHR5cGUgfSk7XG59XG4vKipcbiAqIENvbnZlcnQgYSBgQmxvYmAgdG8gYSBkYXRhIFVSTCBzdHJpbmdcbiAqIChlLmcuIGAnZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLRy4uLidgKS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgZGF0YVVSTCA9IGJsb2JVdGlsLmJsb2JUb0RhdGFVUkwoYmxvYik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYmxvYlxuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGRhdGEgVVJMIHN0cmluZ1xuICovXG5mdW5jdGlvbiBibG9iVG9EYXRhVVJMKGJsb2IpIHtcbiAgICByZXR1cm4gYmxvYlRvQmFzZTY0U3RyaW5nKGJsb2IpLnRoZW4oZnVuY3Rpb24gKGJhc2U2NFN0cmluZykge1xuICAgICAgICByZXR1cm4gJ2RhdGE6JyArIGJsb2IudHlwZSArICc7YmFzZTY0LCcgKyBiYXNlNjRTdHJpbmc7XG4gICAgfSk7XG59XG4vKipcbiAqIENvbnZlcnQgYW4gaW1hZ2UncyBgc3JjYCBVUkwgdG8gYSBkYXRhIFVSTCBieSBsb2FkaW5nIHRoZSBpbWFnZSBhbmQgcGFpbnRpbmdcbiAqIGl0IHRvIGEgYGNhbnZhc2AuXG4gKlxuICogTm90ZTogdGhpcyB3aWxsIGNvZXJjZSB0aGUgaW1hZ2UgdG8gdGhlIGRlc2lyZWQgY29udGVudCB0eXBlLCBhbmQgaXRcbiAqIHdpbGwgb25seSBwYWludCB0aGUgZmlyc3QgZnJhbWUgb2YgYW4gYW5pbWF0ZWQgR0lGLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqIGBgYGpzXG4gKiBibG9iVXRpbC5pbWdTcmNUb0RhdGFVUkwoJ2h0dHA6Ly9teXNpdGUuY29tL2ltZy5wbmcnKS50aGVuKGZ1bmN0aW9uIChkYXRhVVJMKSB7XG4gKiAgIC8vIHN1Y2Nlc3NcbiAqIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgLy8gZXJyb3JcbiAqIH0pO1xuICogYGBgXG4gKlxuICogYGBganNcbiAqIGJsb2JVdGlsLmltZ1NyY1RvRGF0YVVSTCgnaHR0cDovL3NvbWUtb3RoZXItc2l0ZS5jb20vaW1nLmpwZycsICdpbWFnZS9qcGVnJyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAnQW5vbnltb3VzJywgMS4wKS50aGVuKGZ1bmN0aW9uIChkYXRhVVJMKSB7XG4gKiAgIC8vIHN1Y2Nlc3NcbiAqIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgLy8gZXJyb3JcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHNyYyAtIGltYWdlIHNyY1xuICogQHBhcmFtIHR5cGUgLSB0aGUgY29udGVudCB0eXBlIChvcHRpb25hbCwgZGVmYXVsdHMgdG8gJ2ltYWdlL3BuZycpXG4gKiBAcGFyYW0gY3Jvc3NPcmlnaW4gLSBmb3IgQ09SUy1lbmFibGVkIGltYWdlcywgc2V0IHRoaXMgdG9cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQW5vbnltb3VzJyB0byBhdm9pZCBcInRhaW50ZWQgY2FudmFzXCIgZXJyb3JzXG4gKiBAcGFyYW0gcXVhbGl0eSAtIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMSBpbmRpY2F0aW5nIGltYWdlIHF1YWxpdHlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZSByZXF1ZXN0ZWQgdHlwZSBpcyAnaW1hZ2UvanBlZycgb3IgJ2ltYWdlL3dlYnAnXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZGF0YSBVUkwgc3RyaW5nXG4gKi9cbmZ1bmN0aW9uIGltZ1NyY1RvRGF0YVVSTChzcmMsIHR5cGUsIGNyb3NzT3JpZ2luLCBxdWFsaXR5KSB7XG4gICAgdHlwZSA9IHR5cGUgfHwgJ2ltYWdlL3BuZyc7XG4gICAgcmV0dXJuIGxvYWRJbWFnZShzcmMsIGNyb3NzT3JpZ2luKS50aGVuKGltZ1RvQ2FudmFzKS50aGVuKGZ1bmN0aW9uIChjYW52YXMpIHtcbiAgICAgICAgcmV0dXJuIGNhbnZhcy50b0RhdGFVUkwodHlwZSwgcXVhbGl0eSk7XG4gICAgfSk7XG59XG4vKipcbiAqIENvbnZlcnQgYSBgY2FudmFzYCB0byBhIGBCbG9iYC5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiBgYGBqc1xuICogYmxvYlV0aWwuY2FudmFzVG9CbG9iKGNhbnZhcykudGhlbihmdW5jdGlvbiAoYmxvYikge1xuICogICAvLyBzdWNjZXNzXG4gKiB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gKiAgIC8vIGVycm9yXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIE1vc3QgYnJvd3NlcnMgc3VwcG9ydCBjb252ZXJ0aW5nIGEgY2FudmFzIHRvIGJvdGggYCdpbWFnZS9wbmcnYCBhbmQgYCdpbWFnZS9qcGVnJ2AuIFlvdSBtYXlcbiAqIGFsc28gd2FudCB0byB0cnkgYCdpbWFnZS93ZWJwJ2AsIHdoaWNoIHdpbGwgd29yayBpbiBzb21lIGJyb3dzZXJzIGxpa2UgQ2hyb21lIChhbmQgaW4gb3RoZXIgYnJvd3NlcnMsIHdpbGwganVzdCBmYWxsIGJhY2sgdG8gYCdpbWFnZS9wbmcnYCk6XG4gKlxuICogYGBganNcbiAqIGJsb2JVdGlsLmNhbnZhc1RvQmxvYihjYW52YXMsICdpbWFnZS93ZWJwJykudGhlbihmdW5jdGlvbiAoYmxvYikge1xuICogICAvLyBzdWNjZXNzXG4gKiB9KS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7XG4gKiAgIC8vIGVycm9yXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBjYW52YXMgLSBIVE1MQ2FudmFzRWxlbWVudFxuICogQHBhcmFtIHR5cGUgLSB0aGUgY29udGVudCB0eXBlIChvcHRpb25hbCwgZGVmYXVsdHMgdG8gJ2ltYWdlL3BuZycpXG4gKiBAcGFyYW0gcXVhbGl0eSAtIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMSBpbmRpY2F0aW5nIGltYWdlIHF1YWxpdHlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZSByZXF1ZXN0ZWQgdHlwZSBpcyAnaW1hZ2UvanBlZycgb3IgJ2ltYWdlL3dlYnAnXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYEJsb2JgXG4gKi9cbmZ1bmN0aW9uIGNhbnZhc1RvQmxvYihjYW52YXMsIHR5cGUsIHF1YWxpdHkpIHtcbiAgICBpZiAodHlwZW9mIGNhbnZhcy50b0Jsb2IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICBjYW52YXMudG9CbG9iKHJlc29sdmUsIHR5cGUsIHF1YWxpdHkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShkYXRhVVJMVG9CbG9iKGNhbnZhcy50b0RhdGFVUkwodHlwZSwgcXVhbGl0eSkpKTtcbn1cbi8qKlxuICogQ29udmVydCBhbiBpbWFnZSdzIGBzcmNgIFVSTCB0byBhIGBCbG9iYCBieSBsb2FkaW5nIHRoZSBpbWFnZSBhbmQgcGFpbnRpbmdcbiAqIGl0IHRvIGEgYGNhbnZhc2AuXG4gKlxuICogTm90ZTogdGhpcyB3aWxsIGNvZXJjZSB0aGUgaW1hZ2UgdG8gdGhlIGRlc2lyZWQgY29udGVudCB0eXBlLCBhbmQgaXRcbiAqIHdpbGwgb25seSBwYWludCB0aGUgZmlyc3QgZnJhbWUgb2YgYW4gYW5pbWF0ZWQgR0lGLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqIGBgYGpzXG4gKiBibG9iVXRpbC5pbWdTcmNUb0Jsb2IoJ2h0dHA6Ly9teXNpdGUuY29tL2ltZy5wbmcnKS50aGVuKGZ1bmN0aW9uIChibG9iKSB7XG4gKiAgIC8vIHN1Y2Nlc3NcbiAqIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgLy8gZXJyb3JcbiAqIH0pO1xuICogYGBgXG4gKlxuICogYGBganNcbiAqIGJsb2JVdGlsLmltZ1NyY1RvQmxvYignaHR0cDovL3NvbWUtb3RoZXItc2l0ZS5jb20vaW1nLmpwZycsICdpbWFnZS9qcGVnJyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAnQW5vbnltb3VzJywgMS4wKS50aGVuKGZ1bmN0aW9uIChibG9iKSB7XG4gKiAgIC8vIHN1Y2Nlc3NcbiAqIH0pLmNhdGNoKGZ1bmN0aW9uIChlcnIpIHtcbiAqICAgLy8gZXJyb3JcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHNyYyAtIGltYWdlIHNyY1xuICogQHBhcmFtIHR5cGUgLSB0aGUgY29udGVudCB0eXBlIChvcHRpb25hbCwgZGVmYXVsdHMgdG8gJ2ltYWdlL3BuZycpXG4gKiBAcGFyYW0gY3Jvc3NPcmlnaW4gLSBmb3IgQ09SUy1lbmFibGVkIGltYWdlcywgc2V0IHRoaXMgdG9cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQW5vbnltb3VzJyB0byBhdm9pZCBcInRhaW50ZWQgY2FudmFzXCIgZXJyb3JzXG4gKiBAcGFyYW0gcXVhbGl0eSAtIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMSBpbmRpY2F0aW5nIGltYWdlIHF1YWxpdHlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZSByZXF1ZXN0ZWQgdHlwZSBpcyAnaW1hZ2UvanBlZycgb3IgJ2ltYWdlL3dlYnAnXG4gKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgYEJsb2JgXG4gKi9cbmZ1bmN0aW9uIGltZ1NyY1RvQmxvYihzcmMsIHR5cGUsIGNyb3NzT3JpZ2luLCBxdWFsaXR5KSB7XG4gICAgdHlwZSA9IHR5cGUgfHwgJ2ltYWdlL3BuZyc7XG4gICAgcmV0dXJuIGxvYWRJbWFnZShzcmMsIGNyb3NzT3JpZ2luKS50aGVuKGltZ1RvQ2FudmFzKS50aGVuKGZ1bmN0aW9uIChjYW52YXMpIHtcbiAgICAgICAgcmV0dXJuIGNhbnZhc1RvQmxvYihjYW52YXMsIHR5cGUsIHF1YWxpdHkpO1xuICAgIH0pO1xufVxuLyoqXG4gKiBDb252ZXJ0IGFuIGBBcnJheUJ1ZmZlcmAgdG8gYSBgQmxvYmAuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiBgYGBqc1xuICogdmFyIGJsb2IgPSBibG9iVXRpbC5hcnJheUJ1ZmZlclRvQmxvYihhcnJheUJ1ZmYsICdhdWRpby9tcGVnJyk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYnVmZmVyXG4gKiBAcGFyYW0gdHlwZSAtIHRoZSBjb250ZW50IHR5cGUgKG9wdGlvbmFsKVxuICogQHJldHVybnMgQmxvYlxuICovXG5mdW5jdGlvbiBhcnJheUJ1ZmZlclRvQmxvYihidWZmZXIsIHR5cGUpIHtcbiAgICByZXR1cm4gY3JlYXRlQmxvYihbYnVmZmVyXSwgdHlwZSk7XG59XG4vKipcbiAqIENvbnZlcnQgYSBgQmxvYmAgdG8gYW4gYEFycmF5QnVmZmVyYC5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiBibG9iVXRpbC5ibG9iVG9BcnJheUJ1ZmZlcihibG9iKS50aGVuKGZ1bmN0aW9uIChhcnJheUJ1ZmYpIHtcbiAqICAgLy8gc3VjY2Vzc1xuICogfSkuY2F0Y2goZnVuY3Rpb24gKGVycikge1xuICogICAvLyBlcnJvclxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYmxvYlxuICogQHJldHVybnMgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIGBBcnJheUJ1ZmZlcmBcbiAqL1xuZnVuY3Rpb24gYmxvYlRvQXJyYXlCdWZmZXIoYmxvYikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIub25sb2FkZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJlYWRlci5yZXN1bHQgfHwgbmV3IEFycmF5QnVmZmVyKDApO1xuICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICB9O1xuICAgICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDtcbiAgICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpO1xuICAgIH0pO1xufVxuLyoqXG4gKiBDb252ZXJ0IGFuIGBBcnJheUJ1ZmZlcmAgdG8gYSBiaW5hcnkgc3RyaW5nLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciBteVN0cmluZyA9IGJsb2JVdGlsLmFycmF5QnVmZmVyVG9CaW5hcnlTdHJpbmcoYXJyYXlCdWZmKVxuICogYGBgXG4gKlxuICogQHBhcmFtIGJ1ZmZlciAtIGFycmF5IGJ1ZmZlclxuICogQHJldHVybnMgYmluYXJ5IHN0cmluZ1xuICovXG5mdW5jdGlvbiBhcnJheUJ1ZmZlclRvQmluYXJ5U3RyaW5nKGJ1ZmZlcikge1xuICAgIHZhciBiaW5hcnkgPSAnJztcbiAgICB2YXIgYnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpO1xuICAgIHZhciBsZW5ndGggPSBieXRlcy5ieXRlTGVuZ3RoO1xuICAgIHZhciBpID0gLTE7XG4gICAgd2hpbGUgKCsraSA8IGxlbmd0aCkge1xuICAgICAgICBiaW5hcnkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiBiaW5hcnk7XG59XG4vKipcbiAqIENvbnZlcnQgYSBiaW5hcnkgc3RyaW5nIHRvIGFuIGBBcnJheUJ1ZmZlcmAuXG4gKlxuICogYGBganNcbiAqIHZhciBteUJ1ZmZlciA9IGJsb2JVdGlsLmJpbmFyeVN0cmluZ1RvQXJyYXlCdWZmZXIoYmluYXJ5U3RyaW5nKVxuICogYGBgXG4gKlxuICogQHBhcmFtIGJpbmFyeSAtIGJpbmFyeSBzdHJpbmdcbiAqIEByZXR1cm5zIGFycmF5IGJ1ZmZlclxuICovXG5mdW5jdGlvbiBiaW5hcnlTdHJpbmdUb0FycmF5QnVmZmVyKGJpbmFyeSkge1xuICAgIHZhciBsZW5ndGggPSBiaW5hcnkubGVuZ3RoO1xuICAgIHZhciBidWYgPSBuZXcgQXJyYXlCdWZmZXIobGVuZ3RoKTtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoYnVmKTtcbiAgICB2YXIgaSA9IC0xO1xuICAgIHdoaWxlICgrK2kgPCBsZW5ndGgpIHtcbiAgICAgICAgYXJyW2ldID0gYmluYXJ5LmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIHJldHVybiBidWY7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZUJsb2IsIGNyZWF0ZU9iamVjdFVSTCwgcmV2b2tlT2JqZWN0VVJMLCBibG9iVG9CaW5hcnlTdHJpbmcsIGJhc2U2NFN0cmluZ1RvQmxvYiwgYmluYXJ5U3RyaW5nVG9CbG9iLCBibG9iVG9CYXNlNjRTdHJpbmcsIGRhdGFVUkxUb0Jsb2IsIGJsb2JUb0RhdGFVUkwsIGltZ1NyY1RvRGF0YVVSTCwgY2FudmFzVG9CbG9iLCBpbWdTcmNUb0Jsb2IsIGFycmF5QnVmZmVyVG9CbG9iLCBibG9iVG9BcnJheUJ1ZmZlciwgYXJyYXlCdWZmZXJUb0JpbmFyeVN0cmluZywgYmluYXJ5U3RyaW5nVG9BcnJheUJ1ZmZlciB9O1xuIiwiZXhwb3J0IGVudW0gTG9jYWxTdG9yYWdlS2V5IHtcbiAgYXV0b0V4cGxvcmVMb2NhdGlvbnMgPSBcImF1dG9FeHBsb3JlTG9jYXRpb25zXCIsXG4gIGRlYnVnID0gXCJkZWJ1Z1wiLFxuICBleHBsb3JhdGlvbnMgPSBcImV4cGxvcmF0aW9uc1wiLFxuICBtYXJrZXQgPSBcIm1hcmtldFwiLFxuICBtaW5pZ2FtZXMgPSBcIm1pbmlnYW1lc1wiLFxuICBwdXJjaGFzZXMgPSBcInB1cmNoYXNlc1wiLFxuICBzYWxlcyA9IFwic2FsZXNcIixcbiAgdmVyc2lvbiA9IFwidmVyc2lvblwiLFxuICB3aXNobGlzdCA9IFwid2lzaGxpc3RcIixcbn1cbiIsImV4cG9ydCBlbnVtIFNlc3Npb25TdG9yYWdlS2V5IHtcbiAgYWN0aW9uID0gXCJhY3Rpb25cIixcbiAgZXhwbG9yYXRpb25zRG9uZSA9IFwiZXhwbG9yYXRpb25zRG9uZVwiLFxuICBtZXRhID0gXCJtZXRhXCIsXG4gIG1pbmlnYW1lc0RvbmUgPSBcIm1pbmlnYW1lc0RvbmVcIixcbiAgc2VsZWN0ZWRMb2NhdGlvbiA9IFwic2VsZWN0ZWRMb2NhdGlvblwiLFxuICB0YWtlb3ZlciA9IFwidGFrZW92ZXJcIixcbiAgd2lzaGxpc3QgPSBcIndpc2hsaXN0XCIsXG59XG4iLCJleHBvcnQgZW51bSBCb2R5TG9jYXRpb24ge1xuICBBbGwgPSBcIlwiLFxuICBVbmRlcndlYXIgPSAxLFxuICBTa2lucyA9IDIsXG4gIFRhdHRvb3MgPSAyMCxcbiAgTW91dGhzID0gMjEsXG4gIEV5ZXMgPSAzLFxuICBIYWlyID0gNCxcbiAgU29ja3MgPSA1LFxuICBTaG9lcyA9IDYsXG4gIFBhbnRzID0gNyxcbiAgSGFuZEFjY2Vzc29yaWVzID0gOCxcbiAgVG9wcyA9IDksXG4gIENvYXRzID0gMTAsXG4gIEdsb3ZlcyA9IDExLFxuICBOZWNrbGFjZXMgPSAxMixcbiAgRHJlc3NlcyA9IDEzLFxuICBIYXRzID0gMTQsXG4gIEZhY2VBY2Nlc3NvcmllcyA9IDE1LFxuICBGdW5kcyA9IDE2LFxuICBCZWx0cyA9IDE4LFxuICBBdG1vc3BoZXJlcyA9IDE5LFxufVxuIiwiaW1wb3J0IHsgVHlwZSB9IGZyb20gXCIuL3R5cGUuZW51bVwiXG5cbmV4cG9ydCBlbnVtIENhdGVnb3J5U3RyaW5nIHtcbiAgYWxsID0gXCJcIixcbiAgZm9vZCA9IFwiZm9vZFwiLFxuICBhbGNoZW15ID0gXCJhbGNoZW15XCIsXG4gIHV0aWxpdHkgPSBcInV0aWxpdHlcIixcbiAgdGFtZSA9IFwidGFtZVwiLFxufVxuXG5leHBvcnQgZW51bSBDYXRlZ29yeU51bWJlciB7XG4gIGFsbCA9IENhdGVnb3J5U3RyaW5nLmFsbCxcbiAgZm9vZCA9IDEsXG4gIGFsY2hlbXkgPSBUeXBlLkNvbnN1bWFibGUsXG4gIHV0aWxpdHkgPSAzLFxuICB0YW1lID0gNCxcbn1cbiIsImV4cG9ydCBlbnVtIEd1YXJkIHtcbiAgYW55ID0gXCJcIixcbiAgbGlnaHQgPSAxLFxuICBvYnNpZGlhbixcbiAgYWJzeW50aGUsXG4gIHNoYWRvdyxcbn1cbiIsImV4cG9ydCBlbnVtIFJhcml0eSB7XG4gIGFsbCA9IFwiXCIsXG4gIGNvbW1vbiA9IFwiY29tbW9uXCIsXG4gIHJhcmUgPSBcInJhcmVcIixcbiAgRXBpYyA9IFwiZXBpY1wiLFxuICBsZWdlbmRhcnkgPSBcImxlZ2VuZGFyeVwiLFxuICBldmVudCA9IFwiZXZlbnRcIixcbn1cbiIsImV4cG9ydCBlbnVtIFR5cGUge1xuICBBbGwgPSBcIlwiLFxuICBCYWcgPSBcIkJhZ1wiLFxuICBDb25zdW1hYmxlID0gXCJDb25zdW1hYmxlXCIsXG4gIEVnZ0l0ZW0gPSBcIkVnZ0l0ZW1cIixcbiAgUGxheWVyV2VhcmFibGVJdGVtID0gXCJQbGF5ZXJXZWFyYWJsZUl0ZW1cIixcbiAgUXVlc3RJdGVtID0gXCJRdWVzdEl0ZW1cIixcbn1cbiIsImV4cG9ydCBlbnVtIFRha2VvdmVyQWN0aW9uIHtcbiAgZGFpbHkgPSBcImRhaWx5XCIsXG4gIG1pbmlnYW1lcyA9IFwibWluaWdhbWVzXCIsXG4gIGV4cGxvcmF0aW9ucyA9IFwiZXhwbG9yYXRpb25zXCIsXG4gIGF1Y3Rpb25zID0gXCJhdWN0aW9uc1wiLFxuICBidXkgPSBcImJ1eVwiLFxuICAvLyBzZWxsLFxuICB3YWl0ID0gXCJ3YWl0XCIsXG59XG4iLCJpbXBvcnQgeyBiYXNlNjRTdHJpbmdUb0Jsb2IsIGJsb2JUb0Jhc2U2NFN0cmluZyB9IGZyb20gXCJibG9iLXV0aWxcIlxuaW1wb3J0IHR5cGUgeyBGYXZvdXJpdGVPdXRmaXQgfSBmcm9tIFwiLi4vYXBwZWFyYW5jZS9pbnRlcmZhY2VzL2Zhdm91cml0ZV9vdXRmaXRcIlxuaW1wb3J0IGluZGV4ZWRfZGIgZnJvbSBcIi4uL2luZGV4ZWRfZGIvaW5kZXhlZF9kYlwiXG5pbXBvcnQgdHlwZSB7IE1hcmtldEVudHJ5IH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL2ludGVyZmFjZXMvbWFya2V0X2VudHJ5XCJcbmltcG9ydCB0eXBlIHsgU2V0dGluZ3MgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvc2V0dGluZ3NcIlxuaW1wb3J0IHR5cGUgeyBBdXRvRXhwbG9yZUxvY2F0aW9uIH0gZnJvbSBcIi4vYXV0b19leHBsb3JlX2xvY2F0aW9uXCJcbmltcG9ydCB0eXBlIHsgRXhwb3J0YWJsZUZhdm91cml0ZSB9IGZyb20gXCIuL2V4cG9ydGFibGVfZmF2b3VyaXRlXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZUtleSB9IGZyb20gXCIuL2xvY2FsX3N0b3JhZ2UuZW51bVwiXG5pbXBvcnQgdHlwZSB7IFNhbGUgfSBmcm9tIFwiLi9zYWxlXCJcbmltcG9ydCB0eXBlIHsgV2lzaGVkSXRlbSB9IGZyb20gXCIuL3dpc2hlZF9pdGVtXCJcblxuZXhwb3J0IGNsYXNzIExvY2FsU3RvcmFnZSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGxvY2FsU3RvcmFnZSA9IGxvY2FsU3RvcmFnZVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxuXG4gIHN0YXRpYyBnZXQgYXV0b0V4cGxvcmVMb2NhdGlvbnMoKTogQXV0b0V4cGxvcmVMb2NhdGlvbltdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtPEF1dG9FeHBsb3JlTG9jYXRpb25bXT4oXG4gICAgICBMb2NhbFN0b3JhZ2VLZXkuYXV0b0V4cGxvcmVMb2NhdGlvbnMsXG4gICAgICBbXVxuICAgIClcbiAgfVxuXG4gIHN0YXRpYyBzZXQgYXV0b0V4cGxvcmVMb2NhdGlvbnMobG9jYXRpb25zOiBBdXRvRXhwbG9yZUxvY2F0aW9uW10pIHtcbiAgICB0aGlzLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5LmF1dG9FeHBsb3JlTG9jYXRpb25zLCBsb2NhdGlvbnMpXG4gIH1cblxuICBzdGF0aWMgZ2V0IGRlYnVnKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW08Ym9vbGVhbj4oTG9jYWxTdG9yYWdlS2V5LmRlYnVnLCBmYWxzZSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgZGVidWcoZW5hYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkuZGVidWcsIGVuYWJsZWQpXG4gIH1cblxuICBzdGF0aWMgZ2V0IGV4cGxvcmF0aW9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtPGJvb2xlYW4+KExvY2FsU3RvcmFnZUtleS5leHBsb3JhdGlvbnMsIGZhbHNlKVxuICB9XG5cbiAgc3RhdGljIHNldCBleHBsb3JhdGlvbnMoZW5hYmxlZDogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkuZXhwbG9yYXRpb25zLCBlbmFibGVkKVxuICB9XG5cbiAgc3RhdGljIGdldCBtYXJrZXQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbTxib29sZWFuPihMb2NhbFN0b3JhZ2VLZXkubWFya2V0LCBmYWxzZSlcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWFya2V0KGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5Lm1hcmtldCwgZW5hYmxlZClcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWluaWdhbWVzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW08Ym9vbGVhbj4oTG9jYWxTdG9yYWdlS2V5Lm1pbmlnYW1lcywgZmFsc2UpXG4gIH1cblxuICBzdGF0aWMgc2V0IG1pbmlnYW1lcyhlbmFibGVkOiBib29sZWFuKSB7XG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS5taW5pZ2FtZXMsIGVuYWJsZWQpXG4gIH1cblxuICBzdGF0aWMgZ2V0IHB1cmNoYXNlcygpOiBNYXJrZXRFbnRyeVtdIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtPE1hcmtldEVudHJ5W10+KExvY2FsU3RvcmFnZUtleS5wdXJjaGFzZXMsIFtdKVxuICB9XG5cbiAgc3RhdGljIHNldCBwdXJjaGFzZXMoZW50cnk6IE1hcmtldEVudHJ5W10pIHtcbiAgICB0aGlzLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5LnB1cmNoYXNlcywgZW50cnkpXG4gIH1cblxuICBzdGF0aWMgZ2V0IHNhbGVzKCk6IFNhbGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbTxTYWxlW10+KExvY2FsU3RvcmFnZUtleS5zYWxlcywgW10pXG4gIH1cblxuICBzdGF0aWMgc2V0IHNhbGVzKHNhbGU6IFNhbGVbXSkge1xuICAgIHRoaXMuc2V0SXRlbShMb2NhbFN0b3JhZ2VLZXkuc2FsZXMsIHNhbGUpXG4gIH1cblxuICBzdGF0aWMgYXN5bmMgZ2V0U2V0dGluZ3MoKTogUHJvbWlzZTxTZXR0aW5ncz4ge1xuICAgIHJldHVybiB7XG4gICAgICBhdXRvRXhwbG9yZUxvY2F0aW9uczogdGhpcy5hdXRvRXhwbG9yZUxvY2F0aW9ucyxcbiAgICAgIGRlYnVnOiB0aGlzLmRlYnVnLFxuICAgICAgZXhwbG9yYXRpb25zOiB0aGlzLmV4cGxvcmF0aW9ucyxcbiAgICAgIGZhdm91cml0ZXM6IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAoXG4gICAgICAgICAgYXdhaXQgaW5kZXhlZF9kYi5nZXRGYXZvdXJpdGVPdXRmaXRzKClcbiAgICAgICAgKS5tYXA8UHJvbWlzZTxFeHBvcnRhYmxlRmF2b3VyaXRlPj4oYXN5bmMgZmF2b3VyaXRlID0+ICh7XG4gICAgICAgICAgbmFtZTogZmF2b3VyaXRlLm5hbWUsXG4gICAgICAgICAgaXRlbXM6IGZhdm91cml0ZS5pdGVtcyxcbiAgICAgICAgICBiYXNlNjQ6IGF3YWl0IGJsb2JUb0Jhc2U2NFN0cmluZyhmYXZvdXJpdGUuYmxvYiksXG4gICAgICAgIH0pKVxuICAgICAgKSxcbiAgICAgIG1hcmtldDogdGhpcy5tYXJrZXQsXG4gICAgICBtaW5pZ2FtZXM6IHRoaXMubWluaWdhbWVzLFxuICAgICAgdmVyc2lvbjogdGhpcy52ZXJzaW9uLFxuICAgICAgd2lzaGxpc3Q6IHRoaXMud2lzaGxpc3QsXG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIHNldFNldHRpbmdzKHNldHRpbmdzOiBTZXR0aW5ncyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuYXV0b0V4cGxvcmVMb2NhdGlvbnMgPSBzZXR0aW5ncy5hdXRvRXhwbG9yZUxvY2F0aW9uc1xuICAgIHRoaXMuZGVidWcgPSBzZXR0aW5ncy5kZWJ1Z1xuICAgIHRoaXMuZXhwbG9yYXRpb25zID0gc2V0dGluZ3MuZXhwbG9yYXRpb25zXG4gICAgdGhpcy5tYXJrZXQgPSBzZXR0aW5ncy5tYXJrZXRcbiAgICB0aGlzLm1pbmlnYW1lcyA9IHNldHRpbmdzLm1pbmlnYW1lc1xuICAgIHRoaXMudmVyc2lvbiA9IHNldHRpbmdzLnZlcnNpb25cbiAgICB0aGlzLndpc2hsaXN0ID0gc2V0dGluZ3Mud2lzaGxpc3RcblxuICAgIGF3YWl0IGluZGV4ZWRfZGIuY2xlYXJGYXZvdXJpdGVPdXRmaXRzKClcbiAgICBmb3IgKGNvbnN0IGZhdm91cml0ZSBvZiBzZXR0aW5ncy5mYXZvdXJpdGVzLm1hcDxGYXZvdXJpdGVPdXRmaXQ+KFxuICAgICAgZmF2b3VyaXRlID0+ICh7XG4gICAgICAgIGJsb2I6IGJhc2U2NFN0cmluZ1RvQmxvYihmYXZvdXJpdGUuYmFzZTY0KSxcbiAgICAgICAgaXRlbXM6IGZhdm91cml0ZS5pdGVtcyxcbiAgICAgICAgbmFtZTogZmF2b3VyaXRlLm5hbWUsXG4gICAgICB9KVxuICAgICkpIHtcbiAgICAgIHZvaWQgaW5kZXhlZF9kYi5hZGRGYXZvdXJpdGVPdXRmaXQoZmF2b3VyaXRlKVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXQgdmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW08c3RyaW5nPihMb2NhbFN0b3JhZ2VLZXkudmVyc2lvbiwgXCJcIilcbiAgfVxuXG4gIHN0YXRpYyBzZXQgdmVyc2lvbih2ZXJzaW9uOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNldEl0ZW0oTG9jYWxTdG9yYWdlS2V5LnZlcnNpb24sIHZlcnNpb24pXG4gIH1cblxuICBzdGF0aWMgZ2V0IHdpc2hsaXN0KCk6IFdpc2hlZEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbTxXaXNoZWRJdGVtW10+KExvY2FsU3RvcmFnZUtleS53aXNobGlzdCwgW10pXG4gIH1cblxuICBzdGF0aWMgc2V0IHdpc2hsaXN0KGxvY2F0aW9uczogV2lzaGVkSXRlbVtdKSB7XG4gICAgdGhpcy5zZXRJdGVtKExvY2FsU3RvcmFnZUtleS53aXNobGlzdCwgbG9jYXRpb25zKVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0SXRlbTxUPihrZXk6IExvY2FsU3RvcmFnZUtleSwgZmFsbGJhY2s6IFQpOiBUIHtcbiAgICByZXR1cm4gPFQ+KFxuICAgICAgKEpTT04ucGFyc2UodGhpcy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpID8/IEpTT04uc3RyaW5naWZ5KGZhbGxiYWNrKSkgPz9cbiAgICAgICAgZmFsbGJhY2spXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgc2V0SXRlbTxUPihrZXk6IExvY2FsU3RvcmFnZUtleSwgdmFsdWU6IFQpOiB2b2lkIHtcbiAgICB0aGlzLmxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgSlNPTi5zdHJpbmdpZnkodmFsdWUpKVxuICB9XG59XG4iLCJpbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuXG5leHBvcnQgY2xhc3MgQ29uc29sZSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IGNvbnNvbGUgPSBjb25zb2xlXG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0IGRlYnVnZ2luZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gTG9jYWxTdG9yYWdlLmRlYnVnXG4gIH1cblxuICBzdGF0aWMgZGVidWcobWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRlYnVnZ2luZykgcmV0dXJuXG4gICAgdGhpcy5jb25zb2xlLmRlYnVnKG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKVxuICB9XG5cbiAgc3RhdGljIGVycm9yKG1lc3NhZ2U6IHN0cmluZywgLi4ub3B0aW9uYWxQYXJhbXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kZWJ1Z2dpbmcpIHJldHVyblxuICAgIHRoaXMuY29uc29sZS5lcnJvcihtZXNzYWdlLCAuLi5vcHRpb25hbFBhcmFtcylcbiAgfVxuXG4gIHN0YXRpYyBpbmZvKG1lc3NhZ2U6IHN0cmluZywgLi4ub3B0aW9uYWxQYXJhbXM6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5kZWJ1Z2dpbmcpIHJldHVyblxuICAgIHRoaXMuY29uc29sZS5pbmZvKG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKVxuICB9XG5cbiAgc3RhdGljIGxvZyhtZXNzYWdlOiBzdHJpbmcsIC4uLm9wdGlvbmFsUGFyYW1zOiB1bmtub3duW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGVidWdnaW5nKSByZXR1cm5cbiAgICB0aGlzLmNvbnNvbGUubG9nKG1lc3NhZ2UsIC4uLm9wdGlvbmFsUGFyYW1zKVxuICB9XG5cbiAgc3RhdGljIHdhcm4obWVzc2FnZTogc3RyaW5nLCAuLi5vcHRpb25hbFBhcmFtczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRlYnVnZ2luZykgcmV0dXJuXG4gICAgdGhpcy5jb25zb2xlLndhcm4obWVzc2FnZSwgLi4ub3B0aW9uYWxQYXJhbXMpXG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgTWV0YSB9IGZyb20gXCIuLi9hcGkvbWV0YVwiXG5pbXBvcnQgdHlwZSB7IEF1dG9FeHBsb3JlTG9jYXRpb24gfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9hdXRvX2V4cGxvcmVfbG9jYXRpb25cIlxuaW1wb3J0IHR5cGUgeyBXaXNoZWRJdGVtIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2Uvd2lzaGVkX2l0ZW1cIlxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2VLZXkgfSBmcm9tIFwiLi9zZXNzaW9uX3N0b3JhZ2UuZW51bVwiXG5pbXBvcnQgdHlwZSB7IFRha2VvdmVyQWN0aW9uIH0gZnJvbSBcIi4vdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxuXG5leHBvcnQgY2xhc3MgU2Vzc2lvblN0b3JhZ2Uge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBzZXNzaW9uU3RvcmFnZSA9IHNlc3Npb25TdG9yYWdlXG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgc3RhdGljIGdldCBhY3Rpb24oKTogVGFrZW92ZXJBY3Rpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5LmFjdGlvbiwgbnVsbClcbiAgfVxuXG4gIHN0YXRpYyBzZXQgYWN0aW9uKGFjdGlvbjogVGFrZW92ZXJBY3Rpb24gfCBudWxsKSB7XG4gICAgdGhpcy5zZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5LmFjdGlvbiwgYWN0aW9uKVxuICB9XG5cbiAgc3RhdGljIGdldCBleHBsb3JhdGlvbnNEb25lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkuZXhwbG9yYXRpb25zRG9uZSwgZmFsc2UpXG4gIH1cblxuICBzdGF0aWMgc2V0IGV4cGxvcmF0aW9uc0RvbmUoZG9uZTogYm9vbGVhbikge1xuICAgIHRoaXMuc2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5leHBsb3JhdGlvbnNEb25lLCBkb25lKVxuICB9XG5cbiAgc3RhdGljIGdldCBtZXRhKCk6IE1ldGEgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5Lm1ldGEsIG51bGwpXG4gIH1cblxuICBzdGF0aWMgc2V0IG1ldGEobWV0YTogTWV0YSB8IG51bGwpIHtcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkubWV0YSwgbWV0YSlcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbWluaWdhbWVzRG9uZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJdGVtKFNlc3Npb25TdG9yYWdlS2V5Lm1pbmlnYW1lc0RvbmUsIGZhbHNlKVxuICB9XG5cbiAgc3RhdGljIHNldCBtaW5pZ2FtZXNEb25lKGRvbmU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkubWluaWdhbWVzRG9uZSwgZG9uZSlcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VsZWN0ZWRMb2NhdGlvbigpOiBBdXRvRXhwbG9yZUxvY2F0aW9uIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5zZWxlY3RlZExvY2F0aW9uLCBudWxsKVxuICB9XG5cbiAgc3RhdGljIHNldCBzZWxlY3RlZExvY2F0aW9uKHNlbGVjdGVkOiBBdXRvRXhwbG9yZUxvY2F0aW9uIHwgbnVsbCkge1xuICAgIHRoaXMuc2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS5zZWxlY3RlZExvY2F0aW9uLCBzZWxlY3RlZClcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGFrZW92ZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS50YWtlb3ZlciwgZmFsc2UpXG4gIH1cblxuICBzdGF0aWMgc2V0IHRha2VvdmVyKGVuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkudGFrZW92ZXIsIGVuYWJsZWQpXG4gIH1cblxuICBzdGF0aWMgZ2V0IHdpc2hsaXN0KCk6IFdpc2hlZEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SXRlbShTZXNzaW9uU3RvcmFnZUtleS53aXNobGlzdCwgW10pXG4gIH1cblxuICBzdGF0aWMgc2V0IHdpc2hsaXN0KHdpc2hsaXN0OiBXaXNoZWRJdGVtW10pIHtcbiAgICB0aGlzLnNldEl0ZW0oU2Vzc2lvblN0b3JhZ2VLZXkud2lzaGxpc3QsIHdpc2hsaXN0KVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZ2V0SXRlbTxUPihrZXk6IFNlc3Npb25TdG9yYWdlS2V5LCBmYWxsYmFjazogVCk6IFQge1xuICAgIHJldHVybiA8VD4oXG4gICAgICAoSlNPTi5wYXJzZShcbiAgICAgICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGtleSkgPz8gSlNPTi5zdHJpbmdpZnkoZmFsbGJhY2spXG4gICAgICApID8/IGZhbGxiYWNrKVxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHNldEl0ZW08VD4oa2V5OiBTZXNzaW9uU3RvcmFnZUtleSwgdmFsdWU6IFQpOiB2b2lkIHtcbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpXG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxuaW1wb3J0IHsgdG9nZ2xlVGFrZW92ZXIgfSBmcm9tIFwiLi4vdGFrZW92ZXIvYnJhaW5cIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZFRvcEJhcigpOiB2b2lkIHtcbiAgY29uc3QgaGVhZGVyUmlnaHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImhlYWRlci1yaWdodFwiKVxuICBpZiAoIWhlYWRlclJpZ2h0KSByZXR1cm5cblxuICBjb25zdCBoZWFkZXJUYWtlb3ZlciA9IGhlYWRlclJpZ2h0LnF1ZXJ5U2VsZWN0b3IoXCIjaGVhZGVyLXRha2VvdmVyXCIpXG4gIGlmIChoZWFkZXJUYWtlb3ZlcikgaGVhZGVyVGFrZW92ZXIucmVtb3ZlKClcbiAgZWxzZSBsb2FkTGlua3MoKVxuXG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9oZWFkZXJfdGFrZW92ZXIuaHRtbFwiKVxuICBoZWFkZXJSaWdodC5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJhZnRlcmJlZ2luXCIsXG4gICAgdGVtcGxhdGUucmVuZGVyKHsgdGFrZW92ZXI6IFNlc3Npb25TdG9yYWdlLnRha2VvdmVyLCB0cmFuc2xhdGUgfSlcbiAgKVxuXG4gIGhlYWRlclJpZ2h0XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCIjaGVhZGVyLXRha2VvdmVyXCIpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdG9nZ2xlVGFrZW92ZXIpXG59XG5cbmZ1bmN0aW9uIGxvYWRMaW5rcygpOiB2b2lkIHtcbiAgY29uc3QgaGVhZGVyUHJvZmlsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaGVhZGVyLXByb2ZpbGVcIik/LmZpcnN0Q2hpbGRcbiAgaWYgKGhlYWRlclByb2ZpbGU/LnRleHRDb250ZW50KSB7XG4gICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpXG4gICAgYS5ocmVmID0gXCIvcGxheWVyL3Byb2ZpbGVcIlxuICAgIGEuc3R5bGUuY29sb3IgPSBcInZhcigtLXRleHQtY29sb3IpXCJcbiAgICBhLnN0eWxlLmZvbnRGYW1pbHkgPSAnXCJBbGVncmV5YSBTYW5zXCIsIHNhbnMtc2VyaWYnXG4gICAgYS5zdHlsZS5mb250V2VpZ2h0ID0gXCJ1bnNldFwiXG4gICAgYS50ZXh0Q29udGVudCA9IGhlYWRlclByb2ZpbGUudGV4dENvbnRlbnQudHJpbSgpXG5cbiAgICBjb25zdCBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInBcIilcbiAgICBwLmluc2VydEFkamFjZW50RWxlbWVudChcImJlZm9yZWVuZFwiLCBhKVxuXG4gICAgaGVhZGVyUHJvZmlsZS5yZXBsYWNlV2l0aChwKVxuICB9XG5cbiAgY29uc3QgYXZhdGFyVGl0bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2F2YXRhci1tZW51LWNvbnRhaW5lci1vdXRlcj5wXCIpXG4gIGlmIChhdmF0YXJUaXRsZT8udGV4dENvbnRlbnQpXG4gICAgYXZhdGFyVGl0bGUuaW5uZXJIVE1MID0gYDxhIGhyZWY9XCIvcGxheWVyL3Byb2ZpbGVcIiBzdHlsZT1cImNvbG9yOiAjRkZGRkZGOyBmb250LXNpemU6IDIzcHg7IGZvbnQtd2VpZ2h0OiA5MDA7IHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XCI+JHthdmF0YXJUaXRsZS50ZXh0Q29udGVudC50cmltKCl9PC9hPmBcblxuICBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwiI2F2YXRhci1tZW51LWNvbnRhaW5lcj5jYW52YXNcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiBwYWdlTG9hZChcIi9wbGF5ZXIvYXBwZWFyYW5jZVwiKSlcbn1cbiIsImltcG9ydCB0eXBlIHsgQnV5Tm93UHJpY2UgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2J1eV9ub3dfcHJpY2VcIlxuaW1wb3J0IHR5cGUgeyBDdXJyZW50UHJpY2UgfSBmcm9tIFwiLi9pbnRlcmZhY2VzL2N1cnJlbnRfcHJpY2VcIlxuaW1wb3J0IHR5cGUgeyBNYXJrZXRFbnRyeSB9IGZyb20gXCIuL2ludGVyZmFjZXMvbWFya2V0X2VudHJ5XCJcbmltcG9ydCB0eXBlIHsgTWFya2V0RW50cnlEYXRhU2V0IH0gZnJvbSBcIi4vaW50ZXJmYWNlcy9tYXJrZXRfZW50cnlfZGF0YV9zZXRcIlxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SXRlbURldGFpbHMobGk6IEhUTUxMSUVsZW1lbnQpOiBNYXJrZXRFbnRyeSB8IG51bGwge1xuICBjb25zdCBuYW1lID0gbGkucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIuYWJzdHJhY3QtbmFtZVwiKT8uaW5uZXJUZXh0XG4gIGNvbnN0IHNyYyA9IGxpLnF1ZXJ5U2VsZWN0b3I8SFRNTEltYWdlRWxlbWVudD4oXCIuYWJzdHJhY3QtaWNvbiBpbWdcIik/LnNyY1xuXG4gIGNvbnN0IGN1cnJlbnRQcmljZSA9IGxpLnF1ZXJ5U2VsZWN0b3I8SFRNTEltYWdlRWxlbWVudD4oXG4gICAgXCIucHJpY2UtaXRlbVtkYXRhLWJpZHNdXCJcbiAgKT8uZGF0YXNldCBhcyB1bmtub3duIGFzIEN1cnJlbnRQcmljZVxuXG4gIGNvbnN0IGJ1eU5vd1ByaWNlID0gbGkucXVlcnlTZWxlY3RvcjxIVE1MSW1hZ2VFbGVtZW50PihcbiAgICBcIi5wcmljZS1pdGVtOm5vdChbZGF0YS1iaWRzXSlcIlxuICApPy5kYXRhc2V0IGFzIHVua25vd24gYXMgQnV5Tm93UHJpY2VcblxuICBpZiAoIXNyYyB8fCAhbmFtZSkgcmV0dXJuIG51bGxcblxuICByZXR1cm4ge1xuICAgIC4uLihsaS5kYXRhc2V0IGFzIHVua25vd24gYXMgTWFya2V0RW50cnlEYXRhU2V0KSxcbiAgICBpY29uOiBzcmMsXG4gICAgbmFtZSxcbiAgICBidXlOb3dQcmljZSxcbiAgICBjdXJyZW50UHJpY2UsXG4gICAgZGF0ZTogbmV3IERhdGUoKSxcbiAgfVxufVxuIiwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNsaWNrPFQgZXh0ZW5kcyBIVE1MRWxlbWVudD4oXG4gIHNlbGVjdG9yOiBzdHJpbmdcbik6IFByb21pc2U8VD4ge1xuICByZXR1cm4gbmV3IFByb21pc2U8VD4ocmVzb2x2ZSA9PiB7XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxUPihzZWxlY3RvcilcbiAgICAgIGlmICghZWxlbWVudCkgcmV0dXJuXG4gICAgICBjbGVhckludGVydmFsKGludGVydmFsKVxuXG4gICAgICAvLyBTb21lIGVsZW1lbnRzIGRvbid0IGhhdmUgdGhlaXIgY2xpY2sgaGFuZGxlcnMgcmVhZHkgdW50aWwgdGhleSdyZVxuICAgICAgLy8gaG92ZXJlZC5cbiAgICAgIGNvbnN0IG1vdXNlRXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudChcIk1vdXNlRXZlbnRcIilcbiAgICAgIG1vdXNlRXZlbnQuaW5pdEV2ZW50KFwibW91c2VvdmVyXCIpXG4gICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQobW91c2VFdmVudClcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGVsZW1lbnQuY2xpY2soKVxuICAgICAgICByZXNvbHZlKGVsZW1lbnQpXG4gICAgICB9LCA4MDApXG4gICAgfSwgODAwKVxuICB9KVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWN0aW9uIHtcbiAgLyoqIEtleSBieSB3aGljaCB0aGUgYFNlc3Npb25TdG9yYWdlYCBjYW4gcmVmZXJlbmNlIHRoaXMgYWN0aW9uLiAqL1xuICBhYnN0cmFjdCByZWFkb25seSBrZXk6IFRha2VvdmVyQWN0aW9uXG5cbiAgLyoqIERldGVybWluZXMgaWYgdGhpcyBhY3Rpb24gY2FuIGJlIHBlcmZvcm1lZCBkdXJpbmcgYSB0YWtlb3Zlci4gKi9cbiAgYWJzdHJhY3QgY29uZGl0aW9uKCk6IGJvb2xlYW5cblxuICAvKipcbiAgICogUGVyZm9ybXMgdGhlIGFjdGlvbiBhbmQgcmV0dXJucyBgdHJ1ZWAgdGhlIGJyYWluIGNhbiBjb250aW51ZSB3aXRoIGFub3RoZXJcbiAgICogYWN0aW9uIG9yIGBmYWxzZWAgaWYgdGhpcyBhY3Rpb24gaXNuJ3QgZmluaXNoZWQgZXhlY3V0aW5nLlxuICAgKi9cbiAgYWJzdHJhY3QgcGVyZm9ybSgpOiBQcm9taXNlPGJvb2xlYW4+XG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IGFqYXhTZWFyY2ggfSBmcm9tIFwiLi4vLi4vYWpheC9hamF4X3NlYXJjaFwiXG5pbXBvcnQgeyBidXkgfSBmcm9tIFwiLi4vLi4vYWpheC9idXlcIlxuaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gXCIuLi8uLi9jb25zb2xlXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi8uLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcbmltcG9ydCB0eXBlIHsgV2lzaGVkSXRlbSB9IGZyb20gXCIuLi8uLi9sb2NhbF9zdG9yYWdlL3dpc2hlZF9pdGVtXCJcbmltcG9ydCB0eXBlIHsgTWFya2V0RW50cnkgfSBmcm9tIFwiLi4vLi4vbWFya2V0cGxhY2UvaW50ZXJmYWNlcy9tYXJrZXRfZW50cnlcIlxuaW1wb3J0IHsgZ2V0SXRlbURldGFpbHMgfSBmcm9tIFwiLi4vLi4vbWFya2V0cGxhY2UvbWFya2V0cGxhY2VfaGFuZGxlcnNcIlxuaW1wb3J0IHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcbmltcG9ydCB7IGNsaWNrIH0gZnJvbSBcIi4uL2NsaWNrXCJcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuL2FjdGlvblwiXG5cbmNsYXNzIEJ1eUFjdGlvbiBleHRlbmRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IGtleSA9IFRha2VvdmVyQWN0aW9uLmJ1eVxuXG4gIHByaXZhdGUgZ2V0IGN1cnJlbnRNYWFuYSgpOiBudW1iZXIge1xuICAgIHJldHVybiBOdW1iZXIoXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxBbmNob3JFbGVtZW50PihcIiNjdXJyZW5jeS1tYWFuYVwiKT8uZGF0YXNldFxuICAgICAgICAubWFhbmFcbiAgICApXG4gIH1cblxuICBjb25kaXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIExvY2FsU3RvcmFnZS5tYXJrZXQgJiYgQm9vbGVhbihMb2NhbFN0b3JhZ2Uud2lzaGxpc3QubGVuZ3RoKVxuICB9XG5cbiAgYXN5bmMgcGVyZm9ybSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAobG9jYXRpb24ucGF0aG5hbWUgIT09IFwiL21hcmtldHBsYWNlXCIpIHtcbiAgICAgIGF3YWl0IGNsaWNrPEhUTUxBbmNob3JFbGVtZW50PihcIi5tYWluLW1lbnUtbWFya2V0cGxhY2UgYVwiKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBpY29uTWVzc2FnZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vdGVtcGxhdGVzL2h0bWwvZmxhdnJfbm90aWYvaWNvbl9tZXNzYWdlLmh0bWxcIilcbiAgICBmb3IgKGNvbnN0IHdpc2hlZCBvZiBMb2NhbFN0b3JhZ2Uud2lzaGxpc3QpIHtcbiAgICAgIC8vIENsb3RoZXMgbWlnaHQgYmUgYSBzcGVjaWFsIGV4Y2VwdGlvbi4gSWYgdGhleSBhcmUsIHRoZW4gY2hlY2sgZm9yXG4gICAgICAvLyBgd2lzaGVkLnR5cGUgPT09IFR5cGUuUGxheWVyV2VhcmFibGVJdGVtYC5cbiAgICAgIGlmICh3aXNoZWQuZXJyb3IpIHtcbiAgICAgICAgQ29uc29sZS53YXJuKGBTa2lwcGVkIFwiJHt3aXNoZWQubmFtZX1cImAsIHdpc2hlZClcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIENvbnNvbGUuaW5mbyhgU2VhcmNoaW5nIGZvciBcIiR7d2lzaGVkLm5hbWV9XCJgLCB3aXNoZWQpXG5cbiAgICAgIGxldCBhbW91bnQgPSA4XG4gICAgICBmb3JwYWdlOiBmb3IgKGxldCBwYWdlID0gMTsgYW1vdW50ID09PSA4OyBwYWdlKyspIHtcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHRoaXMuc2VhcmNoKHdpc2hlZCwgcGFnZSlcbiAgICAgICAgYW1vdW50ID0gcmVzdWx0cy5sZW5ndGhcbiAgICAgICAgQ29uc29sZS5sb2coYEZvdW5kICR7YW1vdW50fSByZXN1bHRzYCwgcmVzdWx0cylcblxuICAgICAgICBjb25zdCB3YW50ZWQgPSByZXN1bHRzLmZpbHRlcihcbiAgICAgICAgICByZXN1bHQgPT5cbiAgICAgICAgICAgIHJlc3VsdC5pY29uID09PSB3aXNoZWQuaWNvbiAmJlxuICAgICAgICAgICAgcmVzdWx0LmJ1eU5vd1ByaWNlICYmXG4gICAgICAgICAgICBOdW1iZXIocmVzdWx0LmJ1eU5vd1ByaWNlLnByaWNlKSA8PSB3aXNoZWQucHJpY2UgJiZcbiAgICAgICAgICAgIE51bWJlcihyZXN1bHQuYnV5Tm93UHJpY2UucHJpY2UpIDw9IHRoaXMuY3VycmVudE1hYW5hXG4gICAgICAgIClcbiAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2Ygd2FudGVkKSB7XG4gICAgICAgICAgaWYgKCEoYXdhaXQgdGhpcy5idXkocmVzdWx0KSkpIGJyZWFrIGZvcnBhZ2VcblxuICAgICAgICAgIExvY2FsU3RvcmFnZS5wdXJjaGFzZXMgPSBbXG4gICAgICAgICAgICByZXN1bHQsXG4gICAgICAgICAgICAuLi5Mb2NhbFN0b3JhZ2UucHVyY2hhc2VzLmZpbHRlcihcbiAgICAgICAgICAgICAgcHVyY2hhc2UgPT4gcHVyY2hhc2UuaXRlbWlkICE9PSByZXN1bHQuaXRlbWlkXG4gICAgICAgICAgICApLFxuICAgICAgICAgIF1cblxuICAgICAgICAgIENvbnNvbGUuaW5mbyhcbiAgICAgICAgICAgIGBCb3VnaHQgXCIke3Jlc3VsdC5uYW1lfVwiIGZvciAke051bWJlcihcbiAgICAgICAgICAgICAgcmVzdWx0LmJ1eU5vd1ByaWNlPy5wcmljZVxuICAgICAgICAgICAgKX0gbWFhbmFzLmAsXG4gICAgICAgICAgICByZXN1bHRcbiAgICAgICAgICApXG5cbiAgICAgICAgICAkLmZsYXZyTm90aWYoXG4gICAgICAgICAgICBpY29uTWVzc2FnZS5yZW5kZXIoe1xuICAgICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6IHRyYW5zbGF0ZS50YWtlb3Zlci5ib3VnaHQoXG4gICAgICAgICAgICAgICAgcmVzdWx0Lm5hbWUsXG4gICAgICAgICAgICAgICAgTnVtYmVyKHJlc3VsdC5idXlOb3dQcmljZT8ucHJpY2UpXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBidXkocmVzdWx0OiBNYXJrZXRFbnRyeSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGpzb24gPSBhd2FpdCBidXkoTnVtYmVyKHJlc3VsdC5pdGVtaWQpKVxuICAgIGlmIChqc29uLnJlc3VsdCAhPT0gXCJzdWNjZXNzXCIpXG4gICAgICB0aGlzLnNldEVycm9yKHJlc3VsdC53ZWFyYWJsZWl0ZW1pZCwganNvbi5kYXRhKVxuICAgIHJldHVybiBqc29uLnJlc3VsdCA9PT0gXCJzdWNjZXNzXCJcbiAgfVxuXG4gIC8qKiBTZWFyY2ggZm9yIGEgd2lzaGVkIGl0ZW0gb24gYSBzcGVjaWZpYyBwYWdlIHVzaW5nIHRoZSBpdGVtJ3MgbmFtZS4gKi9cbiAgcHJpdmF0ZSBhc3luYyBzZWFyY2god2lzaGVkOiBXaXNoZWRJdGVtLCBwYWdlID0gMSk6IFByb21pc2U8TWFya2V0RW50cnlbXT4ge1xuICAgIGNvbnN0IGZpbHRlckl0ZW1OYW1lID1cbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oXCIjZmlsdGVyLWl0ZW1OYW1lXCIpXG4gICAgaWYgKGZpbHRlckl0ZW1OYW1lKSBmaWx0ZXJJdGVtTmFtZS52YWx1ZSA9IHdpc2hlZC5uYW1lXG5cbiAgICBjb25zdCBtYXJrZXRwbGFjZVNlYXJjaEl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MVUxpc3RFbGVtZW50PihcbiAgICAgIFwiLm1hcmtldHBsYWNlLXNlYXJjaC1pdGVtc1wiXG4gICAgKVxuICAgIGlmICghbWFya2V0cGxhY2VTZWFyY2hJdGVtcykgcmV0dXJuIFtdXG4gICAgbWFya2V0cGxhY2VTZWFyY2hJdGVtcy5pbm5lckhUTUwgPSBhd2FpdCBhamF4U2VhcmNoKHtcbiAgICAgIG5hbWU6IHdpc2hlZC5uYW1lLFxuICAgICAgcGFnZSxcbiAgICB9KVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20oXG4gICAgICBtYXJrZXRwbGFjZVNlYXJjaEl0ZW1zLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTExJRWxlbWVudD4oXG4gICAgICAgIFwiLm1hcmtldHBsYWNlLXNlYXJjaC1pdGVtXCJcbiAgICAgIClcbiAgICApXG4gICAgICAubWFwKGdldEl0ZW1EZXRhaWxzKVxuICAgICAgLmZpbHRlcjxNYXJrZXRFbnRyeT4oKGl0ZW0pOiBpdGVtIGlzIE1hcmtldEVudHJ5ID0+IGl0ZW0gIT09IG51bGwpXG4gIH1cblxuICAvKiogU2V0IHRoZSBgV2lzaGVkSXRlbS5lcnJvcmAgcHJvcGVydHkgd2l0aG91dCByZW9yZGVyaW5nIHRoZSB3aXNobGlzdC4gKi9cbiAgcHJpdmF0ZSBzZXRFcnJvcih3ZWFyYWJsZWl0ZW1pZDogc3RyaW5nLCBlcnJvcjogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgd2lzaGxpc3QgPSBMb2NhbFN0b3JhZ2Uud2lzaGxpc3RcbiAgICBjb25zdCBpbmRleCA9IHdpc2hsaXN0LmZpbmRJbmRleChcbiAgICAgIGl0ZW0gPT4gaXRlbS53ZWFyYWJsZWl0ZW1pZCA9PT0gd2VhcmFibGVpdGVtaWRcbiAgICApXG4gICAgY29uc3QgZW50cnkgPSB3aXNobGlzdFtpbmRleF1cbiAgICBpZiAoIWVudHJ5KSByZXR1cm5cblxuICAgIGVudHJ5LmVycm9yID0gZXJyb3JcbiAgICBMb2NhbFN0b3JhZ2Uud2lzaGxpc3QgPSBbXG4gICAgICAuLi53aXNobGlzdC5zbGljZSh1bmRlZmluZWQsIGluZGV4KSxcbiAgICAgIGVudHJ5LFxuICAgICAgLi4ud2lzaGxpc3Quc2xpY2UoaW5kZXggKyAxLCB1bmRlZmluZWQpLFxuICAgIF1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgQnV5QWN0aW9uKClcbiIsImltcG9ydCB0eXBlIHsgUGFja2V0IH0gZnJvbSBcIi4uL2FwaS9wYWNrZXRcIlxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tIFwiLi4vc2Vzc2lvbl9zdG9yYWdlL3Nlc3Npb25fc3RvcmFnZVwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidXkoaXRlbUlkOiBudW1iZXIpOiBQcm9taXNlPFBhY2tldDxcIlwiPj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgdm9pZCAkLnBvc3QoXG4gICAgICBcIi9tYXJrZXRwbGFjZS9idXlcIixcbiAgICAgIHsgaWQ6IGl0ZW1JZCB9LFxuICAgICAgKGpzb246IFBhY2tldDxcIlwiPik6IHZvaWQgPT4ge1xuICAgICAgICBTZXNzaW9uU3RvcmFnZS5tZXRhID0ganNvbi5tZXRhXG4gICAgICAgIHJlc29sdmUoanNvbilcblxuICAgICAgICBpZiAoanNvbi5yZXN1bHQgIT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgJC5mbGF2ck5vdGlmKGpzb24uZGF0YSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIFwianNvblwiXG4gICAgKVxuICB9KVxufVxuIiwiaW1wb3J0IHsgQm9keUxvY2F0aW9uIH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL2VudW1zL2JvZHlfbG9jYXRpb24uZW51bVwiXG5pbXBvcnQgeyBDYXRlZ29yeU51bWJlciB9IGZyb20gXCIuLi9tYXJrZXRwbGFjZS9lbnVtcy9jYXRlZ29yeS5lbnVtXCJcbmltcG9ydCB7IEd1YXJkIH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL2VudW1zL2d1YXJkLmVudW1cIlxuaW1wb3J0IHsgUmFyaXR5IH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL2VudW1zL3Jhcml0eS5lbnVtXCJcbmltcG9ydCB7IFR5cGUgfSBmcm9tIFwiLi4vbWFya2V0cGxhY2UvZW51bXMvdHlwZS5lbnVtXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFqYXhTZWFyY2goZGF0YToge1xuICB0eXBlPzogVHlwZVxuICBib2R5TG9jYXRpb24/OiBCb2R5TG9jYXRpb25cbiAgY2F0ZWdvcnk/OiBDYXRlZ29yeU51bWJlclxuICByYXJpdHk/OiBSYXJpdHlcbiAgcHJpY2U/OiBudW1iZXIgfCBcIlwiXG4gIGd1YXJkPzogR3VhcmRcbiAgLyoqIFBhZ2UgbnVtYmVyLCBpbmRleGVkIGJ5IDEgKi9cbiAgcGFnZTogbnVtYmVyXG4gIG5hbWU/OiBzdHJpbmdcbn0pOiBQcm9taXNlPHN0cmluZz4ge1xuICBkYXRhID0ge1xuICAgIC4uLntcbiAgICAgIHR5cGU6IFR5cGUuQWxsLFxuICAgICAgYm9keUxvY2F0aW9uOiBCb2R5TG9jYXRpb24uQWxsLFxuICAgICAgY2F0ZWdvcnk6IENhdGVnb3J5TnVtYmVyLmFsbCxcbiAgICAgIHJhcml0eTogUmFyaXR5LmFsbCxcbiAgICAgIHByaWNlOiBcIlwiLFxuICAgICAgZ3VhcmQ6IEd1YXJkLmFueSxcbiAgICAgIHBhZ2U6IDEsXG4gICAgICBuYW1lOiBcIlwiLFxuICAgIH0sXG4gICAgLi4uZGF0YSxcbiAgfVxuXG4gIGNvbnN0IElURU1TX1BFUl9QQUdFID0gOFxuXG4gIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgdm9pZCAkLmdldChcbiAgICAgIFwiL21hcmtldHBsYWNlL2FqYXhfc2VhcmNoXCIsXG4gICAgICB7XG4gICAgICAgIC4uLmRhdGEsXG4gICAgICAgIGZyb206IChkYXRhLnBhZ2UgLSAxKSAqIElURU1TX1BFUl9QQUdFLFxuICAgICAgICB0bzogSVRFTVNfUEVSX1BBR0UsXG4gICAgICB9LFxuICAgICAgcmVzb2x2ZVxuICAgIClcbiAgfSlcbn1cbiIsImltcG9ydCB7IFRha2VvdmVyQWN0aW9uIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS90YWtlb3Zlcl9hY3Rpb24uZW51bVwiXG5pbXBvcnQgeyByZXNldFRha2VvdmVyIH0gZnJvbSBcIi4uL2JyYWluXCJcbmltcG9ydCB7IGNsaWNrIH0gZnJvbSBcIi4uL2NsaWNrXCJcbmltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uXCJcblxuY2xhc3MgRGFpbHlBY3Rpb24gaW1wbGVtZW50cyBBY3Rpb24ge1xuICByZWFkb25seSBrZXkgPSBUYWtlb3ZlckFjdGlvbi5kYWlseVxuXG4gIC8qKiBDaGVja3MgaWYgdGhlIGRhaWx5IG1hYW5hIGdpZnQgaWYgdGhlcmUuICovXG4gIGNvbmRpdGlvbigpOiBib29sZWFuIHtcbiAgICBjb25zdCBkYWlseUdpZnRDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRhaWx5LWdpZnQtY29udGFpbmVyXCIpXG4gICAgcmV0dXJuIChcbiAgICAgICEhZGFpbHlHaWZ0Q29udGFpbmVyICYmXG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGRhaWx5R2lmdENvbnRhaW5lcikuZGlzcGxheSAhPT0gXCJub25lXCJcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQ2xpY2sgb24gdGhlIGRhaWx5IG1hYW5hIGdpZnQuXG4gICAqIEByZXR1cm5zIGBmYWxzZWAuIFRoaXMgYWN0aW9uIGRvZXMgbm90IHBlcmZvcm0gbWVhbmluZ2Z1bCBhY3Rpb25zIG9uIHRoZVxuICAgKiBwYWdlLlxuICAgKi9cbiAgYXN5bmMgcGVyZm9ybSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBkYWlseUdpZnRDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRhaWx5LWdpZnQtY29udGFpbmVyXCIpXG4gICAgaWYgKFxuICAgICAgIWRhaWx5R2lmdENvbnRhaW5lciB8fFxuICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShkYWlseUdpZnRDb250YWluZXIpLmRpc3BsYXkgPT09IFwibm9uZVwiXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBkYWlseUdpZnRDb250YWluZXIuY2xpY2soKVxuICAgIGF3YWl0IGNsaWNrPEhUTUxCdXR0b25FbGVtZW50PihcIi5maXJzdC1jb25uZXhpb24gLmZsYXZyLWJ1dHRvbi5kZWZhdWx0XCIpXG5cbiAgICByZXNldFRha2VvdmVyKClcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBuZXcgRGFpbHlBY3Rpb24oKVxuIiwiaW1wb3J0IHR5cGUgeyBDaGFuZ2VSZWdpb25EYXRhIH0gZnJvbSBcIi4uL2FwaS9jaGFuZ2VfcmVnaW9uX2RhdGFcIlxuaW1wb3J0IHR5cGUgeyBQYWNrZXQgfSBmcm9tIFwiLi4vYXBpL3BhY2tldFwiXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9IGZyb20gXCIuLi9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoYW5nZVJlZ2lvbihcbiAgbmV3UmVnaW9uSWQ6IG51bWJlclxuKTogUHJvbWlzZTxQYWNrZXQ8Q2hhbmdlUmVnaW9uRGF0YT4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFBhY2tldDxDaGFuZ2VSZWdpb25EYXRhPj4oKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICB2b2lkICQucG9zdChcbiAgICAgIFwiL3BldC9jaGFuZ2VSZWdpb25cIixcbiAgICAgIHsgbmV3UmVnaW9uSWQgfSxcbiAgICAgIChqc29uOiBQYWNrZXQ8Q2hhbmdlUmVnaW9uRGF0YT4pOiB2b2lkID0+IHtcbiAgICAgICAgU2Vzc2lvblN0b3JhZ2UubWV0YSA9IGpzb24ubWV0YVxuICAgICAgICByZXNvbHZlKGpzb24pXG5cbiAgICAgICAgaWYgKGpzb24ucmVzdWx0ICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICQuZmxhdnJOb3RpZihqc29uLmRhdGEpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50UmVnaW9uID0ganNvbi5kYXRhLmN1cnJlbnRSZWdpb25cblxuICAgICAgICBwZW5kaW5nVHJlYXN1cmVIdW50TG9jYXRpb24gPVxuICAgICAgICAgIHR5cGVvZiBqc29uLmRhdGEucGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgIDoganNvbi5kYXRhLnBlbmRpbmdUcmVhc3VyZUh1bnRMb2NhdGlvblxuXG4gICAgICAgIHRpbWVMZWZ0RXhwbG9yYXRpb24gPVxuICAgICAgICAgIHR5cGVvZiBqc29uLmRhdGEudGltZUxlZnRFeHBsb3JhdGlvbiA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICA6IGpzb24uZGF0YS50aW1lTGVmdEV4cGxvcmF0aW9uXG4gICAgICB9XG4gICAgKVxuICB9KVxufVxuIiwiZXhwb3J0IGVudW0gUmVzdWx0IHtcbiAgZXJyb3IgPSBcImVycm9yXCIsXG4gIHN1Y2Nlc3MgPSBcInN1Y2Nlc3NcIixcbn1cbiIsImV4cG9ydCBlbnVtIER1cmF0aW9uVW5pdCB7XG4gIG1pbGxpc2Vjb25kID0gMSxcbiAgc2Vjb25kID0gMTAwMCAqIG1pbGxpc2Vjb25kLFxuICBtaW51dGUgPSA2MCAqIHNlY29uZCxcbiAgaG91ciA9IDYwICogbWludXRlLFxuICBkYXkgPSAyNCAqIGhvdXIsXG4gIHdlZWsgPSA3ICogZGF5LFxufVxuXG5leHBvcnQgY2xhc3MgRHVyYXRpb24ge1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSB2YWx1ZTogbnVtYmVyLCByZWFkb25seSB1bml0OiBEdXJhdGlvblVuaXQpIHt9XG5cbiAgZGl2aWRlKGR1cmF0aW9uOiBEdXJhdGlvbik6IER1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKHRoaXMudmFsdWUgLyBkdXJhdGlvbi50byh0aGlzLnVuaXQpLnZhbHVlLCB0aGlzLnVuaXQpXG4gIH1cblxuICBtaW51cyhkdXJhdGlvbjogRHVyYXRpb24pOiBEdXJhdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBEdXJhdGlvbih0aGlzLnZhbHVlIC0gZHVyYXRpb24udG8odGhpcy51bml0KS52YWx1ZSwgdGhpcy51bml0KVxuICB9XG5cbiAgbXVsdGlwbHkoZHVyYXRpb246IER1cmF0aW9uKTogRHVyYXRpb24ge1xuICAgIHJldHVybiBuZXcgRHVyYXRpb24odGhpcy52YWx1ZSAqIGR1cmF0aW9uLnRvKHRoaXMudW5pdCkudmFsdWUsIHRoaXMudW5pdClcbiAgfVxuXG4gIHBsdXMoZHVyYXRpb246IER1cmF0aW9uKTogRHVyYXRpb24ge1xuICAgIHJldHVybiBuZXcgRHVyYXRpb24odGhpcy52YWx1ZSArIGR1cmF0aW9uLnRvKHRoaXMudW5pdCkudmFsdWUsIHRoaXMudW5pdClcbiAgfVxuXG4gIHRvKHVuaXQ6IER1cmF0aW9uVW5pdCk6IER1cmF0aW9uIHtcbiAgICByZXR1cm4gbmV3IER1cmF0aW9uKCh0aGlzLnZhbHVlICogdGhpcy51bml0KSAvIHVuaXQsIHVuaXQpXG4gIH1cbn1cbiIsImV4cG9ydCBlbnVtIEV4cGxvcmF0aW9uU3RhdHVzIHtcbiAgaWRsZSxcbiAgcmVzdWx0LFxuICBjYXB0dXJlLFxuICBwZW5kaW5nLFxufVxuIiwiaW1wb3J0IHsgY2FwdHVyZUVuZCB9IGZyb20gXCIuLi8uLi9hamF4L2NhcHR1cmVfZW5kXCJcbmltcG9ydCB7IGNoYW5nZVJlZ2lvbiB9IGZyb20gXCIuLi8uLi9hamF4L2NoYW5nZV9yZWdpb25cIlxuaW1wb3J0IHsgZXhwbG9yYXRpb25SZXN1bHRzIH0gZnJvbSBcIi4uLy4uL2FqYXgvZXhwbG9yYXRpb25fcmVzdWx0c1wiXG5pbXBvcnQgeyBSZXN1bHQgfSBmcm9tIFwiLi4vLi4vYXBpL3Jlc3VsdC5lbnVtXCJcbmltcG9ydCB7IENvbnNvbGUgfSBmcm9tIFwiLi4vLi4vY29uc29sZVwiXG5pbXBvcnQgeyBEdXJhdGlvblVuaXQgfSBmcm9tIFwiLi4vLi4vZHVyYXRpb25cIlxuaW1wb3J0IHR5cGUgeyBNYXBSZWdpb24sIFNlYXNvbiB9IGZyb20gXCIuLi8uLi9lbGRhcnlhL2N1cnJlbnRfcmVnaW9uXCJcbmltcG9ydCB0eXBlIHsgUGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uIH0gZnJvbSBcIi4uLy4uL2VsZGFyeWEvdHJlYXN1cmVcIlxuaW1wb3J0IHR5cGUgeyBBdXRvRXhwbG9yZUxvY2F0aW9uIH0gZnJvbSBcIi4uLy4uL2xvY2FsX3N0b3JhZ2UvYXV0b19leHBsb3JlX2xvY2F0aW9uXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi8uLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tIFwiLi4vLi4vc2Vzc2lvbl9zdG9yYWdlL3Nlc3Npb25fc3RvcmFnZVwiXG5pbXBvcnQgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxuaW1wb3J0IHsgY2xpY2sgfSBmcm9tIFwiLi4vY2xpY2tcIlxuaW1wb3J0IHsgRXhwbG9yYXRpb25TdGF0dXMgfSBmcm9tIFwiLi4vZXhwbG9yYXRpb25fc3RhdHVzLmVudW1cIlxuaW1wb3J0IHR5cGUgeyBTdGFydEV4cGxvcmF0aW9uIH0gZnJvbSBcIi4uL3N0YXJ0X2V4cGxvcmF0aW9uXCJcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gXCIuL2FjdGlvblwiXG5cbmNsYXNzIEV4cGxvcmF0aW9uQWN0aW9uIGV4dGVuZHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkga2V5ID0gVGFrZW92ZXJBY3Rpb24uZXhwbG9yYXRpb25zXG5cbiAgcHJpdmF0ZSBnZXQgZ2xvYmFscygpOiB7XG4gICAgY3VycmVudFJlZ2lvbjogTWFwUmVnaW9uXG4gICAgcGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uOiBQZW5kaW5nVHJlYXN1cmVIdW50TG9jYXRpb24gfCBudWxsXG4gICAgdGltZUxlZnRFeHBsb3JhdGlvbjogbnVtYmVyIHwgbnVsbFxuICB9IHtcbiAgICByZXR1cm4geyBjdXJyZW50UmVnaW9uLCBwZW5kaW5nVHJlYXN1cmVIdW50TG9jYXRpb24sIHRpbWVMZWZ0RXhwbG9yYXRpb24gfVxuICB9XG5cbiAgY29uZGl0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBMb2NhbFN0b3JhZ2UuZXhwbG9yYXRpb25zICYmXG4gICAgICAhU2Vzc2lvblN0b3JhZ2UuZXhwbG9yYXRpb25zRG9uZSAmJlxuICAgICAgISFMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnMubGVuZ3RoXG4gICAgKVxuICB9XG5cbiAgYXN5bmMgcGVyZm9ybSgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBpZiAobG9jYXRpb24ucGF0aG5hbWUgIT09IFwiL3BldFwiKSB7XG4gICAgICBhd2FpdCBjbGljazxIVE1MQW5jaG9yRWxlbWVudD4oXCIubWFpbi1tZW51LXBldCBhXCIpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5nZXRFeHBsb3JhdGlvblN0YXR1cygpKSB7XG4gICAgICBjYXNlIEV4cGxvcmF0aW9uU3RhdHVzLmlkbGU6XG4gICAgICAgIGlmICghKGF3YWl0IHRoaXMuc3RhcnRFeHBsb3JhdGlvbigpKS5zZWxlY3RlZClcbiAgICAgICAgICBTZXNzaW9uU3RvcmFnZS5leHBsb3JhdGlvbnNEb25lID0gdHJ1ZVxuICAgICAgICByZXR1cm4gZmFsc2VcblxuICAgICAgY2FzZSBFeHBsb3JhdGlvblN0YXR1cy5wZW5kaW5nOlxuICAgICAgICByZXR1cm4gKGF3YWl0IHRoaXMud2FpdEV4cGxvcmF0aW9uKCkpICYmIHRoaXMucGVyZm9ybSgpXG5cbiAgICAgIGNhc2UgRXhwbG9yYXRpb25TdGF0dXMucmVzdWx0OlxuICAgICAgICBhd2FpdCB0aGlzLmVuZEV4cGxvcmF0aW9uKClcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybSgpXG5cbiAgICAgIGNhc2UgRXhwbG9yYXRpb25TdGF0dXMuY2FwdHVyZTpcbiAgICAgICAgYXdhaXQgdGhpcy5lbmRDYXB0dXJlKClcbiAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybSgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2xpY2tFeHBsb3JlKCk6IFByb21pc2U8SFRNTEJ1dHRvbkVsZW1lbnQ+IHtcbiAgICByZXR1cm4gY2xpY2soXCIjZXhwbG9yZS1idXR0b25cIilcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2xpY2tMb2NhdGlvbihcbiAgICBzZWxlY3RlZDogQXV0b0V4cGxvcmVMb2NhdGlvblxuICApOiBQcm9taXNlPEhUTUxEaXZFbGVtZW50PiB7XG4gICAgcmV0dXJuIGNsaWNrPEhUTUxEaXZFbGVtZW50PihcbiAgICAgIGAubWFwLWxvY2F0aW9uW2RhdGEtaWQ9XCIke3NlbGVjdGVkLmxvY2F0aW9uLmlkfVwiXWBcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGNsaWNrUmVnaW9uKHNlbGVjdGVkOiBBdXRvRXhwbG9yZUxvY2F0aW9uKTogSFRNTERpdkVsZW1lbnQgfCBudWxsIHtcbiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcbiAgICAgIGAubWluaW1hcFtkYXRhLW1hcGlkPVwiJHtzZWxlY3RlZC5yZWdpb24uaWR9XCJdYFxuICAgIClcblxuICAgIGlmICghZGl2KSB7XG4gICAgICAvLyBDbGVhcmluZyBpbnZhbGlkIHJlZ2lvbnMgaXMgdXNlZnVsIHRvIHJlbW92ZSBmaW5pc2hlZCBldmVudHMuXG4gICAgICBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnMgPVxuICAgICAgICBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnMuZmlsdGVyKFxuICAgICAgICAgIHNhdmVkID0+IHNhdmVkLnJlZ2lvbi5pZCAhPT0gc2VsZWN0ZWQucmVnaW9uLnRvU3RyaW5nKClcbiAgICAgICAgKVxuXG4gICAgICBTZXNzaW9uU3RvcmFnZS5zZWxlY3RlZExvY2F0aW9uID0gbnVsbFxuICAgICAgbG9jYXRpb24ucmVsb2FkKClcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgZGl2LmNsaWNrKClcbiAgICByZXR1cm4gZGl2XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNsaWNrU2Vhc29uKCk6IFByb21pc2U8SFRNTEltYWdlRWxlbWVudD4ge1xuICAgIHJldHVybiBjbGljazxIVE1MSW1hZ2VFbGVtZW50PihcIiNjcnlzdGFsLWltYWdlcy1jb250YWluZXJcIilcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZW5kQ2FwdHVyZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgdm9pZCBuZXcgQXVkaW8oXG4gICAgICAgIFwiL3N0YXRpYy9ldmVudC8yMDIxL211c2ljL3NvdW5kcy9taXNzaW9uLWNvbXBsZXRlLm1wM1wiXG4gICAgICApLnBsYXkoKVxuICAgIH0gY2F0Y2ggKGU6IHVua25vd24pIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH1cblxuICAgIGF3YWl0IGNsaWNrPEhUTUxCdXR0b25FbGVtZW50PihcIiNvcGVuLWNhcHR1cmUtaW50ZXJmYWNlXCIpXG4gICAgYXdhaXQgY2xpY2s8SFRNTEJ1dHRvbkVsZW1lbnQ+KFwiI2NhcHR1cmUtYnV0dG9uXCIpXG4gICAgYXdhaXQgY2xpY2s8SFRNTEJ1dHRvbkVsZW1lbnQ+KFwiI2Nsb3NlLXJlc3VsdFwiKVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBlbmRFeHBsb3JhdGlvbigpOiBQcm9taXNlPEhUTUxEaXZFbGVtZW50PiB7XG4gICAgcmV0dXJuIGNsaWNrKFwiI2Nsb3NlLXJlc3VsdFwiKVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdXJyZW50U2Vhc29uKCk6IFNlYXNvbiB7XG4gICAgcmV0dXJuIDxTZWFzb24+KEFycmF5LmZyb20oZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcImJvZHlcIik/LmNsYXNzTGlzdCA/PyBbXSlcbiAgICAgIC5maW5kKGMgPT4gYy5zdGFydHNXaXRoKFwic2Vhc29uLVwiKSlcbiAgICAgID8ucmVwbGFjZShcInNlYXNvbi1cIiwgXCJcIikgPz8gbnVsbClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RXhwbG9yYXRpb25TdGF0dXMoKTogRXhwbG9yYXRpb25TdGF0dXMge1xuICAgIGlmIChcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjb3Blbi1jYXB0dXJlLWludGVyZmFjZVwiKSB8fFxuICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNjYXB0dXJlLWludGVyZmFjZS1vdXRlci5hY3RpdmVcIilcbiAgICApIHtcbiAgICAgIHJldHVybiBFeHBsb3JhdGlvblN0YXR1cy5jYXB0dXJlXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjcGVuZGluZy1tYXAtbG9jYXRpb24tZGF0YS1vdXRlci5hY3RpdmVcIikgfHxcbiAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjbWFwLWNvbnRhaW5lci5wZW5kaW5nXCIpXG4gICAgKSB7XG4gICAgICByZXR1cm4gRXhwbG9yYXRpb25TdGF0dXMucGVuZGluZ1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiN0cmVhc3VyZS1odW50LXJlc3VsdC1vdmVybGF5LmFjdGl2ZVwiKSlcbiAgICAgIHJldHVybiBFeHBsb3JhdGlvblN0YXR1cy5yZXN1bHRcbiAgICByZXR1cm4gRXhwbG9yYXRpb25TdGF0dXMuaWRsZVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRMb3dlc3RFbmVyZ3lMb2NhdGlvbigpOiBBdXRvRXhwbG9yZUxvY2F0aW9uIHtcbiAgICByZXR1cm4gTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zLnJlZHVjZSgobG93ZXN0LCBwbGFjZSkgPT5cbiAgICAgIE51bWJlcihwbGFjZS5sb2NhdGlvbi5lbmVyZ3lSZXF1aXJlZCkgPFxuICAgICAgTnVtYmVyKGxvd2VzdC5sb2NhdGlvbi5lbmVyZ3lSZXF1aXJlZClcbiAgICAgICAgPyBwbGFjZVxuICAgICAgICA6IGxvd2VzdFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRMb2NhdGlvbigpOiBBdXRvRXhwbG9yZUxvY2F0aW9uIHwgbnVsbCB7XG4gICAgbGV0IHNlbGVjdGVkID0gU2Vzc2lvblN0b3JhZ2Uuc2VsZWN0ZWRMb2NhdGlvblxuICAgIGlmICghc2VsZWN0ZWQpIHtcbiAgICAgIHNlbGVjdGVkID0gdGhpcy5zZWxlY3RMb2NhdGlvbigpXG4gICAgICBTZXNzaW9uU3RvcmFnZS5zZWxlY3RlZExvY2F0aW9uID0gc2VsZWN0ZWRcbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZWN0ZWRcbiAgfVxuXG4gIHByaXZhdGUgc2VsZWN0TG9jYXRpb24oKTogQXV0b0V4cGxvcmVMb2NhdGlvbiB8IG51bGwge1xuICAgIGNvbnN0IGFmZm9yZGFibGUgPSBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnMuZmlsdGVyKFxuICAgICAgc2F2ZWQgPT4gTnVtYmVyKHNhdmVkLmxvY2F0aW9uLmVuZXJneVJlcXVpcmVkKSA8PSBwZXRFbmVyZ3lcbiAgICApXG5cbiAgICBjb25zdCBtaW5pbXVtRW5lcmd5ID0gdGhpcy5nZXRMb3dlc3RFbmVyZ3lMb2NhdGlvbigpXG4gICAgY29uc3Qgbm90RGVhZEVuZCA9IGFmZm9yZGFibGUuZmlsdGVyKFxuICAgICAgcGxhY2UgPT5cbiAgICAgICAgcGV0RW5lcmd5IC0gTnVtYmVyKHBsYWNlLmxvY2F0aW9uLmVuZXJneVJlcXVpcmVkKSA+PVxuICAgICAgICBOdW1iZXIobWluaW11bUVuZXJneS5sb2NhdGlvbi5lbmVyZ3lSZXF1aXJlZClcbiAgICApXG4gICAgaWYgKG5vdERlYWRFbmQubGVuZ3RoKVxuICAgICAgcmV0dXJuIG5vdERlYWRFbmRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbm90RGVhZEVuZC5sZW5ndGgpXSA/PyBudWxsXG5cbiAgICBjb25zdCBzYW1lRW5lcmd5ID0gYWZmb3JkYWJsZS5maWx0ZXIoXG4gICAgICBwbGFjZSA9PiBOdW1iZXIocGxhY2UubG9jYXRpb24uZW5lcmd5UmVxdWlyZWQpID09PSBwZXRFbmVyZ3lcbiAgICApXG4gICAgaWYgKHNhbWVFbmVyZ3kubGVuZ3RoKVxuICAgICAgcmV0dXJuIHNhbWVFbmVyZ3lbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogc2FtZUVuZXJneS5sZW5ndGgpXSA/PyBudWxsXG5cbiAgICByZXR1cm4gYWZmb3JkYWJsZVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBhZmZvcmRhYmxlLmxlbmd0aCldID8/IG51bGxcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc3RhcnRFeHBsb3JhdGlvbigpOiBQcm9taXNlPFN0YXJ0RXhwbG9yYXRpb24+IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuZ2V0U2VsZWN0ZWRMb2NhdGlvbigpXG4gICAgaWYgKCFzZWxlY3RlZCkgcmV0dXJuIHsgZXhwbG9yaW5nOiBmYWxzZSwgc2VsZWN0ZWQgfVxuICAgIENvbnNvbGUuaW5mbyhcIkV4cGxvcmluZ1wiLCBzZWxlY3RlZClcblxuICAgIC8vIEdvIHRvIHNlYXNvblxuICAgIGlmIChcbiAgICAgIHNlbGVjdGVkLnJlZ2lvbi5zZWFzb24gJiZcbiAgICAgIHRoaXMuZ2V0Q3VycmVudFNlYXNvbigpICE9PSBzZWxlY3RlZC5yZWdpb24uc2Vhc29uXG4gICAgKSB7XG4gICAgICBhd2FpdCB0aGlzLmNsaWNrU2Vhc29uKClcbiAgICAgIHJldHVybiB7IGV4cGxvcmluZzogZmFsc2UsIHNlbGVjdGVkIH1cbiAgICB9XG5cbiAgICAvLyBHbyB0byByZWdpb25cbiAgICB0aGlzLmNsaWNrUmVnaW9uKHNlbGVjdGVkKVxuXG4gICAgLy8gR28gdG8gbG9jYXRpb25cbiAgICBhd2FpdCB0aGlzLmNsaWNrTG9jYXRpb24oc2VsZWN0ZWQpXG4gICAgYXdhaXQgdGhpcy5jbGlja0V4cGxvcmUoKVxuXG4gICAgU2Vzc2lvblN0b3JhZ2Uuc2VsZWN0ZWRMb2NhdGlvbiA9IG51bGxcbiAgICByZXR1cm4geyBleHBsb3Jpbmc6IHRydWUsIHNlbGVjdGVkIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXYWl0IGZvciB1cCB0byAxMCBtaW51dGVzLlxuICAgKiBAcmV0dXJucyB3aGV0aGVyIHRoZSBleHBsb3JhdGlvbiBpcyBmaW5pc2hlZC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgd2FpdEV4cGxvcmF0aW9uKFxuICAgIHNlbGVjdGVkPzogQXV0b0V4cGxvcmVMb2NhdGlvblxuICApOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBkb2N1bWVudFxuICAgICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgICAgICBgLm1pbmltYXBbZGF0YS1tYXBpZD1cIiR7c2VsZWN0ZWQ/LnJlZ2lvbi5pZCA/PyBjdXJyZW50UmVnaW9uLmlkfVwiXWBcbiAgICAgIClcbiAgICAgID8uY2xpY2soKVxuXG4gICAgbGV0IG1zID0gMyAqIER1cmF0aW9uVW5pdC5zZWNvbmRcbiAgICBpZiAoc2VsZWN0ZWQpIG1zICs9IHNlbGVjdGVkLmxvY2F0aW9uLnRpbWVUb0V4cGxvcmUgKiBEdXJhdGlvblVuaXQubWludXRlXG4gICAgZWxzZSBpZiAodGltZUxlZnRFeHBsb3JhdGlvbiAmJiB0aW1lTGVmdEV4cGxvcmF0aW9uID4gMClcbiAgICAgIG1zICs9IHRpbWVMZWZ0RXhwbG9yYXRpb24gKiBEdXJhdGlvblVuaXQuc2Vjb25kXG4gICAgZWxzZSBpZiAoXG4gICAgICAhcGVuZGluZ1RyZWFzdXJlSHVudExvY2F0aW9uICYmXG4gICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI21hcC1jb250YWluZXIucGVuZGluZ1wiKVxuICAgICkge1xuICAgICAgY29uc3QganNvbiA9IGF3YWl0IGV4cGxvcmF0aW9uUmVzdWx0cygpXG4gICAgICBpZiAoanNvbi5yZXN1bHQgIT09IFJlc3VsdC5zdWNjZXNzKSByZXR1cm4gZmFsc2VcblxuICAgICAgY29uc3QgY2FwdHVyZSA9IGpzb24uZGF0YS5yZXN1bHRzLmZpbmQoXG4gICAgICAgIHJlc3VsdCA9PiByZXN1bHQudHlwZSA9PT0gXCJjYXB0dXJlXCJcbiAgICAgIClcbiAgICAgIGlmICghY2FwdHVyZSkgcmV0dXJuIGZhbHNlXG4gICAgICBhd2FpdCBjYXB0dXJlRW5kKClcblxuICAgICAgLy8gUmVsb2FkaW5nIGlzIHRoZSBvbmx5IHBvc3NpYmxlIGFjdGlvbiBpZiB0aGUgZXhwbG9yYXRpb24gZmluaXNoZWQgaW4gYVxuICAgICAgLy8gZGlmZmVyZW50IHJlZ2lvbi5cbiAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgIFwiUmVsb2FkaW5nIGJlY2F1c2UgdGhlIGV4cGxvcmF0aW9uIGlzIGluIGFub3RoZXIgcmVnaW9uLlwiLFxuICAgICAgICB0aGlzLmdsb2JhbHNcbiAgICAgIClcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBEdXJhdGlvblVuaXQubWludXRlKSlcbiAgICAgIGxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGlmIChtcyA+IDEwICogRHVyYXRpb25Vbml0Lm1pbnV0ZSkgcmV0dXJuIGZhbHNlXG5cbiAgICBDb25zb2xlLmxvZyhcbiAgICAgIGBXYWl0aW5nIGZvciB0aGUgZXhwbG9yYXRpb24gdG8gZW5kIGluICR7TWF0aC5jZWlsKFxuICAgICAgICBtcyAvIER1cmF0aW9uVW5pdC5zZWNvbmRcbiAgICAgICl9IHNlY29uZHMuLi5gLFxuICAgICAgdGhpcy5nbG9iYWxzXG4gICAgKVxuICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpXG4gICAgYXdhaXQgY2hhbmdlUmVnaW9uKE51bWJlcihzZWxlY3RlZD8ucmVnaW9uLmlkID8/IGN1cnJlbnRSZWdpb24uaWQpKVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy5nZXRFeHBsb3JhdGlvblN0YXR1cygpID09PSBFeHBsb3JhdGlvblN0YXR1cy5wZW5kaW5nICYmXG4gICAgICB0aW1lTGVmdEV4cGxvcmF0aW9uICYmXG4gICAgICB0aW1lTGVmdEV4cGxvcmF0aW9uIDwgMFxuICAgICkge1xuICAgICAgQ29uc29sZS5pbmZvKFxuICAgICAgICBcIlJlbG9hZGluZyBiZWNhdXNlIHRoZSB0aW1lciBpcyBkZXN5bmNocm9uaXNlZC5cIixcbiAgICAgICAgdGhpcy5nbG9iYWxzXG4gICAgICApXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgRHVyYXRpb25Vbml0LnNlY29uZCkpXG4gICAgICBsb2NhdGlvbi5yZWxvYWQoKVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IEV4cGxvcmF0aW9uQWN0aW9uKClcbiIsImltcG9ydCB0eXBlIHsgRXhwbG9yYXRpb25SZXN1bHRzRGF0YSB9IGZyb20gXCIuLi9hcGkvZXhwbG9yYXRpb25fcmVzdWx0c19kYXRhXCJcbmltcG9ydCB0eXBlIHsgUGFja2V0IH0gZnJvbSBcIi4uL2FwaS9wYWNrZXRcIlxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tIFwiLi4vc2Vzc2lvbl9zdG9yYWdlL3Nlc3Npb25fc3RvcmFnZVwiXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHBsb3JhdGlvblJlc3VsdHMoKTogUHJvbWlzZTxcbiAgUGFja2V0PEV4cGxvcmF0aW9uUmVzdWx0c0RhdGE+XG4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFBhY2tldDxFeHBsb3JhdGlvblJlc3VsdHNEYXRhPj4oKHJlc29sdmUpOiB2b2lkID0+IHtcbiAgICB2b2lkICQucG9zdChcbiAgICAgIFwiL3BldC9leHBsb3JhdGlvblJlc3VsdHNcIixcbiAgICAgIChqc29uOiBQYWNrZXQ8RXhwbG9yYXRpb25SZXN1bHRzRGF0YT4pOiB2b2lkID0+IHtcbiAgICAgICAgU2Vzc2lvblN0b3JhZ2UubWV0YSA9IGpzb24ubWV0YVxuICAgICAgICByZXNvbHZlKGpzb24pXG5cbiAgICAgICAgaWYgKGpzb24ucmVzdWx0ICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICQuZmxhdnJOb3RpZihqc29uLmRhdGEpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG4gIH0pXG59XG4iLCJpbXBvcnQgdHlwZSB7IEV4cGxvcmF0aW9uUmVzdWx0c0RhdGEgfSBmcm9tIFwiLi4vYXBpL2V4cGxvcmF0aW9uX3Jlc3VsdHNfZGF0YVwiXG5pbXBvcnQgdHlwZSB7IFBhY2tldCB9IGZyb20gXCIuLi9hcGkvcGFja2V0XCJcbmltcG9ydCB7IFNlc3Npb25TdG9yYWdlIH0gZnJvbSBcIi4uL3Nlc3Npb25fc3RvcmFnZS9zZXNzaW9uX3N0b3JhZ2VcIlxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2FwdHVyZUVuZCgpOiBQcm9taXNlPFBhY2tldDxFeHBsb3JhdGlvblJlc3VsdHNEYXRhPj4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgdm9pZCAkLnBvc3QoXG4gICAgICBcIi9wZXQvY2FwdHVyZS9lbmRcIixcbiAgICAgIChqc29uOiBQYWNrZXQ8RXhwbG9yYXRpb25SZXN1bHRzRGF0YT4pOiB2b2lkID0+IHtcbiAgICAgICAgU2Vzc2lvblN0b3JhZ2UubWV0YSA9IGpzb24ubWV0YVxuICAgICAgICByZXNvbHZlKGpzb24pXG5cbiAgICAgICAgaWYgKGpzb24ucmVzdWx0ICE9PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgICQuZmxhdnJOb3RpZihqc29uLmRhdGEpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG4gIH0pXG59XG4iLCJpbXBvcnQgdHlwZSB7IE1pbmlnYW1lIH0gZnJvbSBcIi4vbWluaWdhbWVcIlxuXG5leHBvcnQgY29uc3QgZmxhcHB5OiBNaW5pZ2FtZSA9IHtcbiAgbmFtZTogXCJGbGFwcHlcIixcbiAgc2NvcmVNaW46IDE4MCxcbiAgc2NvcmVNYXg6IDIwMCxcbiAgZGVsYXlNaW46IDYwXzAwMCxcbiAgZGVsYXlNYXg6IDcwXzAwMCxcbiAgYnV0dG9uU2VsZWN0b3I6ICcubWluaWdhbWUtc3RhcnQgW2hyZWY9XCIvbWluaWdhbWVzL2J1YmJsdGVtcGxlXCJdIC5ubC1idXR0b24nLFxuICBpY29uOiBcIi9zdGF0aWMvaW1nL25ldy1sYXlvdXQvbWluaWdhbWVzL2ljb25fYnViYmxldGVtcGxlLnBuZ1wiLFxufVxuIiwiaW1wb3J0IHR5cGUgeyBNaW5pZ2FtZSB9IGZyb20gXCIuL21pbmlnYW1lXCJcblxuZXhwb3J0IGNvbnN0IGhhdGNobGluZ3M6IE1pbmlnYW1lID0ge1xuICBuYW1lOiBcIkhhdGNobGluZ3NcIixcbiAgc2NvcmVNaW46IDE4LFxuICBzY29yZU1heDogMjAsXG4gIGRlbGF5TWluOiAzMF8wMDAsXG4gIGRlbGF5TWF4OiAzMF8wMDAsXG4gIGJ1dHRvblNlbGVjdG9yOiAnLm1pbmlnYW1lLXN0YXJ0IFtocmVmPVwiL21pbmlnYW1lcy9jb2Nvb25pbnBpY2tcIl0gLm5sLWJ1dHRvbicsXG4gIGljb246IFwiL3N0YXRpYy9pbWcvbmV3LWxheW91dC9taW5pZ2FtZXMvaWNvbl9jb2NvbmlucGljay5wbmdcIixcbn1cbiIsImltcG9ydCB0eXBlIHsgTWluaWdhbWUgfSBmcm9tIFwiLi9taW5pZ2FtZVwiXG5cbmV4cG9ydCBjb25zdCBwZWdnbGU6IE1pbmlnYW1lID0ge1xuICBuYW1lOiBcIlBlZ2dsZVwiLFxuICBzY29yZU1pbjogOSxcbiAgc2NvcmVNYXg6IDEwLFxuICBkZWxheU1pbjogMTBfMDAwLFxuICBkZWxheU1heDogMjBfMDAwLFxuICBidXR0b25TZWxlY3RvcjogJy5taW5pZ2FtZS1zdGFydCBbaHJlZj1cIi9taW5pZ2FtZXMvZ2VtYm9tYlwiXSAubmwtYnV0dG9uJyxcbiAgaWNvbjogXCIvc3RhdGljL2ltZy9uZXctbGF5b3V0L21pbmlnYW1lcy9pY29uX2dlbWJvbWIucG5nXCIsXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB0eXBlIHsgR2V0UHJpemVzRGF0YSB9IGZyb20gXCIuLi9hcGkvZ2V0X3ByaXplc19kYXRhXCJcbmltcG9ydCB0eXBlIHsgUGFja2V0IH0gZnJvbSBcIi4uL2FwaS9wYWNrZXRcIlxuaW1wb3J0IHR5cGUgeyBTdGFydEdhbWVEYXRhIH0gZnJvbSBcIi4uL2FwaS9zdGFydF9nYW1lX2RhdGFcIlxuaW1wb3J0IFwiLi4vZWxkYXJ5YS9qcXVlcnlcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IGZsYXBweSB9IGZyb20gXCIuL2ZsYXBweVwiXG5pbXBvcnQgeyBoYXRjaGxpbmdzIH0gZnJvbSBcIi4vaGF0Y2hsaW5nc1wiXG5pbXBvcnQgdHlwZSB7IE1pbmlnYW1lIH0gZnJvbSBcIi4vbWluaWdhbWVcIlxuaW1wb3J0IHsgcGVnZ2xlIH0gZnJvbSBcIi4vcGVnZ2xlXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBsYXlQZWdnbGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBwbGF5KHBlZ2dsZSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBsYXlGbGFwcHkoKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBwbGF5KGZsYXBweSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBsYXlIYXRjaGxpbmdzKCk6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gcGxheShoYXRjaGxpbmdzKVxufVxuXG5hc3luYyBmdW5jdGlvbiBwbGF5KG1pbmlnYW1lOiBNaW5pZ2FtZSk6IFByb21pc2U8dm9pZD4ge1xuICAvLyBEaXNhYmxlIGJ1dHRvbnNcbiAgYXdhaXQgbmV3IFByb21pc2U8Ym9vbGVhbj4ocmVzb2x2ZSA9PiB7XG4gICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICBjb25zdCBidXR0b25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MQnV0dG9uRWxlbWVudD4oXG4gICAgICAgIFwiLm1pbmlnYW1lcy1ydWxlcyAuZmxhdnItYnV0dG9uXCJcbiAgICAgIClcblxuICAgICAgaWYgKGJ1dHRvbnMubGVuZ3RoKSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpXG5cbiAgICAgICAgZm9yIChjb25zdCBidXR0b24gb2YgYnV0dG9ucykge1xuICAgICAgICAgIGJ1dHRvbi5jbGFzc0xpc3QuYWRkKFwiZGlzYWJsZWRcIilcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgIH1cbiAgICB9LCAyNTApXG4gIH0pXG5cbiAgY29uc3QganNvbiA9IGF3YWl0IGV4ZWN1dGUobWluaWdhbWUpXG5cbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2ZsYXZyX25vdGlmL2ljb25fbWVzc2FnZS5odG1sXCIpXG4gICQuZmxhdnJOb3RpZihcbiAgICB0ZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgLi4ubWluaWdhbWUsXG4gICAgICBtZXNzYWdlOiB0cmFuc2xhdGUubWluaWdhbWVzLnBsYXlpbmcobWluaWdhbWUubmFtZSksXG4gICAgfSlcbiAgKVxuXG4gIGNvbnN0IGdhbWVUb2tlbiA9IGpzb24uZGF0YVxuICBjb25zdCBzY29yZSA9IHJhbmRvbUludChtaW5pZ2FtZS5zY29yZU1pbiwgbWluaWdhbWUuc2NvcmVNYXgpXG4gIGNvbnN0IGVuY190b2tlbiA9IHhvckVuY29kZShnYW1lVG9rZW4sIHNjb3JlLnRvU3RyaW5nKCkpXG4gIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT5cbiAgICBzZXRUaW1lb3V0KHJlc29sdmUsIHJhbmRvbUludChtaW5pZ2FtZS5kZWxheU1pbiwgbWluaWdhbWUuZGVsYXlNYXgpKVxuICApXG5cbiAgYXdhaXQgZ2V0UHJpemVzKG1pbmlnYW1lLCBnYW1lVG9rZW4sIHNjb3JlKVxuICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgcmFuZG9tSW50KDEwMDAsIDMwMDApKSlcblxuICBhd2FpdCBzZW5kKGVuY190b2tlbiwgc2NvcmUsIG1pbmlnYW1lLm5hbWUudG9Mb3dlckNhc2UoKSlcbiAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIHJhbmRvbUludCgxMDAwLCAzMDAwKSkpXG59XG5cbmZ1bmN0aW9uIHJhbmRvbUludChtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbiArIDEpICsgbWluKVxufVxuXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlKG1pbmlnYW1lOiBNaW5pZ2FtZSk6IFByb21pc2U8UGFja2V0PFN0YXJ0R2FtZURhdGE+PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxQYWNrZXQ8U3RhcnRHYW1lRGF0YT4+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBpZiAodHlwZW9mIFJlY2FwdGNoYSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgUmVjYXB0Y2hhLmV4ZWN1dGUoXG4gICAgICAgIGBtaW5pZ2FtZVN0YXJ0JHttaW5pZ2FtZS5uYW1lfWAsXG4gICAgICAgICh0b2tlbik6IHZvaWQgPT5cbiAgICAgICAgICB2b2lkIHN0YXJ0R2FtZShtaW5pZ2FtZSwgdG9rZW4pLnRoZW4ocmVzb2x2ZSkuY2F0Y2gocmVqZWN0KVxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB2b2lkIHN0YXJ0R2FtZShtaW5pZ2FtZSkudGhlbihyZXNvbHZlKS5jYXRjaChyZWplY3QpXG4gICAgfVxuICB9KVxufVxuXG5hc3luYyBmdW5jdGlvbiBzdGFydEdhbWUoXG4gIG1pbmlnYW1lOiBNaW5pZ2FtZSxcbiAgcmVjYXB0Y2hhVG9rZW4/OiBzdHJpbmdcbik6IFByb21pc2U8UGFja2V0PFN0YXJ0R2FtZURhdGE+PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZTxQYWNrZXQ8U3RhcnRHYW1lRGF0YT4+KFxuICAgIChyZXNvbHZlLCByZWplY3QpID0+XG4gICAgICB2b2lkICQuYWpheCh7XG4gICAgICAgIHVybDogXCIvbWluaWdhbWVzL2FqYXhfc3RhcnRHYW1lXCIsXG4gICAgICAgIHR5cGU6IFwicG9zdFwiLFxuICAgICAgICBkYXRhVHlwZTogXCJqc29uXCIsXG4gICAgICAgIGRhdGE6IHJlY2FwdGNoYVRva2VuXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGdhbWU6IG1pbmlnYW1lLm5hbWUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgcmVjYXB0Y2hhVG9rZW46IHJlY2FwdGNoYVRva2VuLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBnYW1lOiBtaW5pZ2FtZS5uYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICB9LFxuICAgICAgICBzdWNjZXNzOiAoanNvbjogUGFja2V0PFN0YXJ0R2FtZURhdGE+KTogdm9pZCA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShqc29uKVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHJlamVjdCgpXG4gICAgICAgIH0sXG4gICAgICB9KVxuICApXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFByaXplcyhcbiAgbWluaWdhbWU6IE1pbmlnYW1lLFxuICBnYW1lVG9rZW46IHN0cmluZyxcbiAgc2NvcmU6IG51bWJlclxuKTogUHJvbWlzZTxQYWNrZXQ8R2V0UHJpemVzRGF0YT4+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlPFBhY2tldDxHZXRQcml6ZXNEYXRhPj4oXG4gICAgKHJlc29sdmUpOiB2b2lkID0+XG4gICAgICB2b2lkICQucG9zdChcbiAgICAgICAgXCIvbWluaWdhbWVzL2FqYXhfZ2V0UHJpemVzXCIsXG4gICAgICAgIHsgZ2FtZTogbWluaWdhbWUubmFtZS50b0xvd2VyQ2FzZSgpLCBzY29yZTogc2NvcmUgfSxcbiAgICAgICAgKGpzb246IFBhY2tldDxHZXRQcml6ZXNEYXRhPik6IHZvaWQgPT4ge1xuICAgICAgICAgIHJlc29sdmUoanNvbilcblxuICAgICAgICAgIGlmIChqc29uLnJlc3VsdCA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9mbGF2cl9ub3RpZi9pY29uX21lc3NhZ2UuaHRtbFwiKVxuXG4gICAgICAgICAgICAkLmZsYXZyTm90aWYoXG4gICAgICAgICAgICAgIHRlbXBsYXRlLnJlbmRlcih7XG4gICAgICAgICAgICAgICAgLi4ubWluaWdhbWUsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogdHJhbnNsYXRlLm1pbmlnYW1lcy5wbGF5ZWRfZm9yKFxuICAgICAgICAgICAgICAgICAgbWluaWdhbWUubmFtZSxcbiAgICAgICAgICAgICAgICAgIGpzb24uZGF0YS5tYWFuYVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSBlbHNlICQuZmxhdnJOb3RpZihqc29uLmRhdGEpXG4gICAgICAgIH0sXG4gICAgICAgIFwianNvblwiXG4gICAgICApLmZhaWwoKCkgPT5cbiAgICAgICAgc2V0VGltZW91dCgoKTogdm9pZCA9PiB7XG4gICAgICAgICAgcmVzb2x2ZShnZXRQcml6ZXMobWluaWdhbWUsIGdhbWVUb2tlbiwgc2NvcmUpKVxuICAgICAgICB9LCByYW5kb21JbnQoMTAwMCwgMzAwMCkpXG4gICAgICApXG4gIClcbn1cblxuLyoqXG4gKiBTw6ljdXJpc2F0aW9uIGRlIGwnZW52b2kgZHUgc2NvcmVcbiAqIEJhc8OpIHN1ciBsJ2VuY29kYWdlIFhPUiA6IGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvWE9SX2NpcGhlclxuICogRWZmZWN0dWUgdW4gWE9SIGJpdCDDoCBiaXQgZW50cmUgdW5lIGNoYWluZSBldCB1bmUgY2zDqVxuICovXG5mdW5jdGlvbiB4b3JFbmNvZGUoc3RyOiBzdHJpbmcsIGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gQXNzdXJlIHF1ZSBsZXMgZGV1eCBwYXJhbcOodHJlcyBzb2llbnQgZGVzIGNoYWluZXMgZGUgY2FyYWN0w6hyZVxuICBzdHIgPSBzdHIudG9TdHJpbmcoKVxuICBrZXkgPSBrZXkudG9TdHJpbmcoKVxuXG4gIC8qKiBFbmNvZGFnZSBYT1IgKi9cbiAgbGV0IHhvciA9IFwiXCJcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3ByZWZlci1mb3Itb2ZcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBsZXQgdG1wID0gc3RyW2ldXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBrZXkubGVuZ3RoOyArK2opIHtcbiAgICAgIHRtcCA9IFN0cmluZy5mcm9tQ2hhckNvZGUodG1wIS5jaGFyQ29kZUF0KDApIF4ga2V5LmNoYXJDb2RlQXQoaikpXG4gICAgfVxuICAgIHhvciArPSB0bXBcbiAgfVxuXG4gIC8vIFJlbnZvaWUgbGUgcsOpc3VsdGF0IGVuIGVuY29kYW50IGxlcyBjYXJhY3TDqHJlcyBzcMOpY2lhdXggcG91dmFudCBwb3NlciBwcm9ibMOobWUgKFxcbiBwYXIgZXhlbXBsZSlcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh4b3IpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlbmQoXG4gIGVuY190b2tlbjogc3RyaW5nLFxuICBzY29yZTogbnVtYmVyLFxuICBnYW1lOiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgaWYgKHR5cGVvZiBSZWNhcHRjaGEgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIFJlY2FwdGNoYS5leGVjdXRlKFxuICAgICAgICBcIm1pbmlnYW1lU2F2ZVwiICsgZ2FtZSxcbiAgICAgICAgKHJlY2FwdGNoYVRva2VuKTogdm9pZCA9PlxuICAgICAgICAgIHZvaWQgc2F2ZVNjb3JlKGVuY190b2tlbiwgc2NvcmUsIGdhbWUsIHJlY2FwdGNoYVRva2VuKS50aGVuKHJlc29sdmUpXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHZvaWQgc2F2ZVNjb3JlKGVuY190b2tlbiwgc2NvcmUsIGdhbWUpLnRoZW4ocmVzb2x2ZSlcbiAgICB9XG4gIH0pXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNhdmVTY29yZShcbiAgZW5jX3Rva2VuOiBzdHJpbmcsXG4gIHNjb3JlOiBudW1iZXIsXG4gIGdhbWU6IHN0cmluZyxcbiAgcmVjYXB0Y2hhVG9rZW4/OiBzdHJpbmdcbik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgY29uc3QgdG9rZW4gPSBkZWNvZGVVUklDb21wb25lbnQoZW5jX3Rva2VuKVxuXG4gICAgdm9pZCAkLmFqYXgoe1xuICAgICAgdHlwZTogXCJwb3N0XCIsXG4gICAgICB1cmw6IFwiL21pbmlnYW1lcy9hamF4X3NhdmVTY29yZVwiLFxuICAgICAgZGF0YTogcmVjYXB0Y2hhVG9rZW5cbiAgICAgICAgPyB7XG4gICAgICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgICAgICBzY29yZTogc2NvcmUsXG4gICAgICAgICAgICBnYW1lOiBnYW1lLFxuICAgICAgICAgICAgcmVjYXB0Y2hhVG9rZW46IHJlY2FwdGNoYVRva2VuLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgICAgICBzY29yZTogc2NvcmUsXG4gICAgICAgICAgICBnYW1lOiBnYW1lLFxuICAgICAgICAgIH0sXG4gICAgICBzdWNjZXNzOiAoKTogdm9pZCA9PiB7XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PlxuICAgICAgICBzZXRUaW1lb3V0KCgpOiB2b2lkID0+IHtcbiAgICAgICAgICByZXNvbHZlKHNhdmVTY29yZShlbmNfdG9rZW4sIHNjb3JlLCBnYW1lKSlcbiAgICAgICAgfSwgcmFuZG9tSW50KDEwMDAsIDMwMDApKSxcbiAgICB9KVxuICB9KVxufVxuIiwiaW1wb3J0IHsgQ29uc29sZSB9IGZyb20gXCIuLi9jb25zb2xlXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9IGZyb20gXCIuLi9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlXCJcbmltcG9ydCB0eXBlIHsgVGFrZW92ZXJBY3Rpb24gfSBmcm9tIFwiLi4vc2Vzc2lvbl9zdG9yYWdlL3Rha2VvdmVyX2FjdGlvbi5lbnVtXCJcbmltcG9ydCB7IGxvYWRUb3BCYXIgfSBmcm9tIFwiLi4vdWkvdG9wX2JhclwiXG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCIuL2NsYXNzZXMvYWN0aW9uXCJcbmltcG9ydCBidXlBY3Rpb24gZnJvbSBcIi4vY2xhc3Nlcy9idXlfYWN0aW9uXCJcbmltcG9ydCBkYWlseUFjdGlvbiBmcm9tIFwiLi9jbGFzc2VzL2RhaWx5X2FjdGlvblwiXG5pbXBvcnQgZXhwbG9yYXRpb25BY3Rpb24gZnJvbSBcIi4vY2xhc3Nlcy9leHBsb3JhdGlvbl9hY3Rpb25cIlxuaW1wb3J0IG1pbmlnYW1lQWN0aW9uIGZyb20gXCIuL2NsYXNzZXMvbWluaWdhbWVfYWN0aW9uXCJcbmltcG9ydCB3YWl0QWN0aW9uIGZyb20gXCIuL2NsYXNzZXMvd2FpdF9hY3Rpb25cIlxuXG4vKiogQXV0b21hdGVkIGVudHJ5IHBvaW50IG9mIHRoZSB0YWtlb3Zlci4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkVGFrZW92ZXIoKTogdm9pZCB7XG4gIGlmIChTZXNzaW9uU3RvcmFnZS50YWtlb3Zlcikgdm9pZCB0YWtlb3ZlcigpXG59XG5cbi8qKiBNYW51YWwgZW50cnkgcG9pbnQgb2YgdGhlIHRha2VvdmVyLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvZ2dsZVRha2VvdmVyKCk6IHZvaWQge1xuICByZXNldFRha2VvdmVyKClcbiAgU2Vzc2lvblN0b3JhZ2UudGFrZW92ZXIgPSAhU2Vzc2lvblN0b3JhZ2UudGFrZW92ZXJcblxuICBsb2FkVG9wQmFyKClcbiAgaWYgKFNlc3Npb25TdG9yYWdlLnRha2VvdmVyKSAkLmZsYXZyTm90aWYodHJhbnNsYXRlLnRha2VvdmVyLmVuYWJsZWQpXG4gIGVsc2UgJC5mbGF2ck5vdGlmKHRyYW5zbGF0ZS50YWtlb3Zlci5lbmFibGVkKVxuXG4gIHZvaWQgdGFrZW92ZXIoKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzZXRUYWtlb3ZlcigpOiB2b2lkIHtcbiAgU2Vzc2lvblN0b3JhZ2UuYWN0aW9uID0gbnVsbFxuICBTZXNzaW9uU3RvcmFnZS5leHBsb3JhdGlvbnNEb25lID0gZmFsc2VcbiAgU2Vzc2lvblN0b3JhZ2UubWluaWdhbWVzRG9uZSA9IGZhbHNlXG4gIFNlc3Npb25TdG9yYWdlLnNlbGVjdGVkTG9jYXRpb24gPSBudWxsXG4gIFNlc3Npb25TdG9yYWdlLndpc2hsaXN0ID0gW11cbn1cblxuYXN5bmMgZnVuY3Rpb24gdGFrZW92ZXIoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghU2Vzc2lvblN0b3JhZ2UudGFrZW92ZXIpIHJldHVyblxuICBpZiAoZGFpbHlBY3Rpb24uY29uZGl0aW9uKCkpIGF3YWl0IGRhaWx5QWN0aW9uLnBlcmZvcm0oKVxuXG4gIGNvbnN0IGFjdGlvbiA9IGFjdGlvbnMuZmluZChhY3Rpb24gPT4gYWN0aW9uLmtleSA9PT0gU2Vzc2lvblN0b3JhZ2UuYWN0aW9uKVxuICBpZiAoIWFjdGlvbikge1xuICAgIGNoYW5nZUFjdGlvbigpXG4gICAgdm9pZCB0YWtlb3ZlcigpXG4gICAgcmV0dXJuXG4gIH1cblxuICBDb25zb2xlLmluZm8oXCJBY3Rpb246XCIsIGFjdGlvbi5rZXkpXG5cbiAgaWYgKGFjdGlvbi5jb25kaXRpb24oKSAmJiAoYXdhaXQgYWN0aW9uLnBlcmZvcm0oKSkpIHJldHVyblxuICBlbHNlIHtcbiAgICBjaGFuZ2VBY3Rpb24oKVxuICAgIHZvaWQgdGFrZW92ZXIoKVxuICAgIHJldHVyblxuICB9XG59XG5cbmNvbnN0IGFjdGlvbnM6IEFjdGlvbltdID0gW1xuICBtaW5pZ2FtZUFjdGlvbixcbiAgZXhwbG9yYXRpb25BY3Rpb24sXG4gIGJ1eUFjdGlvbixcbiAgd2FpdEFjdGlvbixcbl1cblxuZnVuY3Rpb24gY2hhbmdlQWN0aW9uKCk6IFRha2VvdmVyQWN0aW9uIHtcbiAgY29uc3QgbmV4dCA9XG4gICAgYWN0aW9ucy5maW5kSW5kZXgoYWN0aW9uID0+IGFjdGlvbi5rZXkgPT09IFNlc3Npb25TdG9yYWdlLmFjdGlvbikgKyAxXG5cbiAgcmV0dXJuIChTZXNzaW9uU3RvcmFnZS5hY3Rpb24gPVxuICAgIGFjdGlvbnNbbmV4dCA+PSBhY3Rpb25zLmxlbmd0aCA/IDAgOiBuZXh0XSEua2V5KVxufVxuIiwiaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uLy4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgeyBwbGF5RmxhcHB5LCBwbGF5SGF0Y2hsaW5ncywgcGxheVBlZ2dsZSB9IGZyb20gXCIuLi8uLi9taW5pZ2FtZXMvZW1pbGVcIlxuaW1wb3J0IHsgZmxhcHB5IH0gZnJvbSBcIi4uLy4uL21pbmlnYW1lcy9mbGFwcHlcIlxuaW1wb3J0IHsgaGF0Y2hsaW5ncyB9IGZyb20gXCIuLi8uLi9taW5pZ2FtZXMvaGF0Y2hsaW5nc1wiXG5pbXBvcnQgdHlwZSB7IE1pbmlnYW1lIH0gZnJvbSBcIi4uLy4uL21pbmlnYW1lcy9taW5pZ2FtZVwiXG5pbXBvcnQgeyBwZWdnbGUgfSBmcm9tIFwiLi4vLi4vbWluaWdhbWVzL3BlZ2dsZVwiXG5pbXBvcnQgeyBTZXNzaW9uU3RvcmFnZSB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2Uvc2Vzc2lvbl9zdG9yYWdlXCJcbmltcG9ydCB7IFRha2VvdmVyQWN0aW9uIH0gZnJvbSBcIi4uLy4uL3Nlc3Npb25fc3RvcmFnZS90YWtlb3Zlcl9hY3Rpb24uZW51bVwiXG5pbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCIuL2FjdGlvblwiXG5pbXBvcnQgeyBjbGljayB9IGZyb20gXCIuLi9jbGlja1wiXG5cbmNsYXNzIE1pbmlnYW1lQWN0aW9uIGltcGxlbWVudHMgQWN0aW9uIHtcbiAgcmVhZG9ubHkga2V5ID0gVGFrZW92ZXJBY3Rpb24ubWluaWdhbWVzXG5cbiAgY29uZGl0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBMb2NhbFN0b3JhZ2UubWluaWdhbWVzICYmICFTZXNzaW9uU3RvcmFnZS5taW5pZ2FtZXNEb25lXG4gIH1cblxuICAvKiogRGV0ZXJtaW5lcyBpZiB0aGUgbWluaWdhbWVzIHNob3VsZCBiZSBwbGF5ZWQgcmlnaHQgbm93LlxuICAgKiBAcmV0dXJucyB3aGV0aGVyIHRoZSBtaW5pZ2FtZXMgYXJlIGN1cnJlbnRseSBiZWluZyBwbGF5ZWQuXG4gICAqL1xuICBhc3luYyBwZXJmb3JtKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHN3aXRjaCAobG9jYXRpb24ucGF0aG5hbWUpIHtcbiAgICAgIGNhc2UgXCIvbWluaWdhbWVzXCI6IHtcbiAgICAgICAgY29uc3QgcGxheWluZyA9XG4gICAgICAgICAgdGhpcy5vcGVuTWluaWdhbWUocGVnZ2xlKSB8fFxuICAgICAgICAgIHRoaXMub3Blbk1pbmlnYW1lKGZsYXBweSkgfHxcbiAgICAgICAgICB0aGlzLm9wZW5NaW5pZ2FtZShoYXRjaGxpbmdzKVxuXG4gICAgICAgIGlmICghcGxheWluZykge1xuICAgICAgICAgIFNlc3Npb25TdG9yYWdlLm1pbmlnYW1lc0RvbmUgPSB0cnVlXG4gICAgICAgICAgZG9jdW1lbnRcbiAgICAgICAgICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxCdXR0b25FbGVtZW50PihcbiAgICAgICAgICAgICAgJy5taW5pZ2FtZXMtcnVsZXMgW3JlbD1cImJ0bi1jYW5jZWxcIl0nXG4gICAgICAgICAgICApXG4gICAgICAgICAgICA/LmNsaWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwbGF5aW5nXG4gICAgICB9XG5cbiAgICAgIGNhc2UgXCIvbWluaWdhbWVzL2dlbWJvbWJcIjpcbiAgICAgICAgYXdhaXQgcGxheVBlZ2dsZSgpXG4gICAgICAgIGJyZWFrXG5cbiAgICAgIGNhc2UgXCIvbWluaWdhbWVzL2J1YmJsdGVtcGxlXCI6XG4gICAgICAgIGF3YWl0IHBsYXlGbGFwcHkoKVxuICAgICAgICBicmVha1xuXG4gICAgICBjYXNlIFwiL21pbmlnYW1lcy9jb2Nvb25pbnBpY2tcIjpcbiAgICAgICAgYXdhaXQgcGxheUhhdGNobGluZ3MoKVxuICAgICAgICBicmVha1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhd2FpdCBjbGljazxIVE1MQW5jaG9yRWxlbWVudD4oXCIubWFpbi1tZW51LW1pbmlnYW1lcyBhXCIpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgYXdhaXQgY2xpY2s8SFRNTEFuY2hvckVsZW1lbnQ+KFwiLm1haW4tbWVudS1taW5pZ2FtZXMgYVwiKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKiogQ2xpY2sgb24gYSBtaW5pZ2FtZSdzIGxpbmsuIEByZXR1cm5zIHdoZXRoZXIgdGhlIG1pbmlnYW1lIHdhcyBvcGVuZWQuICovXG4gIHByaXZhdGUgb3Blbk1pbmlnYW1lKG1pbmlnYW1lOiBNaW5pZ2FtZSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0YXJ0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MU3BhbkVsZW1lbnQ+KFxuICAgICAgbWluaWdhbWUuYnV0dG9uU2VsZWN0b3JcbiAgICApXG4gICAgaWYgKCFzdGFydCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgc3RhcnQuY2xpY2soKVxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgbmV3IE1pbmlnYW1lQWN0aW9uKClcbiIsImltcG9ydCB7IENvbnNvbGUgfSBmcm9tIFwiLi4vLi4vY29uc29sZVwiXG5pbXBvcnQgeyBUYWtlb3ZlckFjdGlvbiB9IGZyb20gXCIuLi8uLi9zZXNzaW9uX3N0b3JhZ2UvdGFrZW92ZXJfYWN0aW9uLmVudW1cIlxuaW1wb3J0IHsgQWN0aW9uIH0gZnJvbSBcIi4vYWN0aW9uXCJcblxuY2xhc3MgV2FpdEFjdGlvbiBleHRlbmRzIEFjdGlvbiB7XG4gIHJlYWRvbmx5IGtleSA9IFRha2VvdmVyQWN0aW9uLndhaXRcblxuICBjb25kaXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGFzeW5jIHBlcmZvcm0oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgQ29uc29sZS5sb2coYFdhaXRpbmcgZm9yIDEwIG1pbnV0ZXMuLi5gKVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KHJlc29sdmUgPT5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgfSwgMTAgKiA2MCAqIDEwMDApXG4gICAgKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IG5ldyBXYWl0QWN0aW9uKClcbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuaW1wb3J0IHR5cGUgeyBNYXJrZXRIaXN0b3J5IH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL21hcmtldF9oaXN0b3J5XCJcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBdWN0aW9ucygpOiB2b2lkIHtcbiAgaWYgKGxvY2F0aW9uLnBhdGhuYW1lICE9PSBcIi9tYXJrZXRwbGFjZS9hdWN0aW9uc1wiKSByZXR1cm5cblxuICBjb25zdCBtYXJrZXRwbGFjZUFjdGl2ZUF1Y3Rpb25zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgXCIjbWFya2V0cGxhY2UtYWN0aXZlLWF1Y3Rpb25zXCJcbiAgKVxuICBpZiAoIW1hcmtldHBsYWNlQWN0aXZlQXVjdGlvbnMpIHJldHVyblxuXG4gIGNvbnN0IGxheW91dDJjb2wgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcbiAgICBcIi5tYXJrZXRwbGFjZS1tYWluLWNvbnRhaW5lciAjbGF5b3V0LTJjb2xcIlxuICApXG4gIGlmIChsYXlvdXQyY29sKSBsYXlvdXQyY29sLnN0eWxlLm92ZXJmbG93WCA9IFwidmlzaWJsZVwiXG5cbiAgbG9hZEhpc3RvcnkobWFya2V0cGxhY2VBY3RpdmVBdWN0aW9ucylcbn1cblxuZnVuY3Rpb24gbG9hZEhpc3RvcnkobWFya2V0cGxhY2VBY3RpdmVBdWN0aW9uczogSFRNTERpdkVsZW1lbnQpOiB2b2lkIHtcbiAgbWFya2V0cGxhY2VBY3RpdmVBdWN0aW9ucy5xdWVyeVNlbGVjdG9yKFwic3R5bGVcIik/LnJlbW92ZSgpXG4gIG1hcmtldHBsYWNlQWN0aXZlQXVjdGlvbnMucXVlcnlTZWxlY3RvcihcIiNwdXJjaGFzZS1oaXN0b3J5XCIpPy5yZW1vdmUoKVxuICBtYXJrZXRwbGFjZUFjdGl2ZUF1Y3Rpb25zLnF1ZXJ5U2VsZWN0b3IoXCIjc2FsZS1oaXN0b3J5XCIpPy5yZW1vdmUoKVxuXG4gIGNvbnN0IHRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9tYXJrZXRfaGlzdG9yeS5odG1sXCIpXG4gIGNvbnN0IGhpc3Rvcnk6IE1hcmtldEhpc3RvcnkgPSB7XG4gICAgcHVyY2hhc2VzOiBMb2NhbFN0b3JhZ2UucHVyY2hhc2VzLm1hcChwdXJjaGFzZSA9PiAoe1xuICAgICAgLi4ucHVyY2hhc2UsXG4gICAgICBkYXRlOiB0cmFuc2xhdGUubWFya2V0LmF1Y3Rpb25zLmRhdGVfdGltZV9mb3JtYXQuZm9ybWF0KFxuICAgICAgICBuZXcgRGF0ZShwdXJjaGFzZS5kYXRlKVxuICAgICAgKSxcbiAgICB9KSksXG4gICAgc2FsZXM6IExvY2FsU3RvcmFnZS5zYWxlcy5tYXAoc2FsZSA9PiAoe1xuICAgICAgLi4uc2FsZSxcbiAgICAgIGRhdGU6IHRyYW5zbGF0ZS5tYXJrZXQuYXVjdGlvbnMuZGF0ZV90aW1lX2Zvcm1hdC5mb3JtYXQoXG4gICAgICAgIG5ldyBEYXRlKHNhbGUuZGF0ZSlcbiAgICAgICksXG4gICAgfSkpLFxuICB9XG5cbiAgbWFya2V0cGxhY2VBY3RpdmVBdWN0aW9ucy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICB0ZW1wbGF0ZS5yZW5kZXIoeyAuLi5oaXN0b3J5LCB0cmFuc2xhdGUgfSlcbiAgKVxuXG4gIGZvciAoY29uc3QgcHVyY2hhc2Ugb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MTElFbGVtZW50PihcbiAgICBcIiNwdXJjaGFzZS1oaXN0b3J5IC5tYXJrZXRwbGFjZS1hdWN0aW9ucy1pdGVtXCJcbiAgKSkge1xuICAgIGNvbnN0IGl0ZW1pZCA9IHB1cmNoYXNlLmRhdGFzZXQuaXRlbWlkXG4gICAgcHVyY2hhc2UucXVlcnlTZWxlY3RvcihcIi5kZWxldGUtYnV0dG9uXCIpPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgTG9jYWxTdG9yYWdlLnB1cmNoYXNlcyA9IExvY2FsU3RvcmFnZS5wdXJjaGFzZXMuZmlsdGVyKFxuICAgICAgICBwdXJjaGFzZSA9PiBwdXJjaGFzZS5pdGVtaWQgIT09IGl0ZW1pZFxuICAgICAgKVxuXG4gICAgICBsb2FkSGlzdG9yeShtYXJrZXRwbGFjZUFjdGl2ZUF1Y3Rpb25zKVxuICAgIH0pXG4gIH1cblxuICBmb3IgKGNvbnN0IHNhbGUgb2YgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbDxIVE1MTElFbGVtZW50PihcbiAgICBcIiNzYWxlLWhpc3RvcnkgLm1hcmtldHBsYWNlLXNhbGVzLWl0ZW1cIlxuICApKSB7XG4gICAgY29uc3QgaWNvbiA9IHNhbGUucXVlcnlTZWxlY3RvcjxIVE1MSW1hZ2VFbGVtZW50PihcIi5hYnN0cmFjdC1pY29uIGltZ1wiKT8uc3JjXG4gICAgc2FsZS5xdWVyeVNlbGVjdG9yKFwiLmRlbGV0ZS1idXR0b25cIik/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBMb2NhbFN0b3JhZ2Uuc2FsZXMgPSBMb2NhbFN0b3JhZ2Uuc2FsZXMuZmlsdGVyKHNhbGUgPT4gc2FsZS5pY29uICE9PSBpY29uKVxuXG4gICAgICBsb2FkSGlzdG9yeShtYXJrZXRwbGFjZUFjdGl2ZUF1Y3Rpb25zKVxuICAgIH0pXG4gIH1cbn1cbiIsImltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgdHlwZSB7IENhcm91c2VsTmV3cyB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9jYXJvdXNlbF9uZXdzXCJcblxuZXhwb3J0IGNvbnN0IGNhcm91c2VsQmVlbW9vdkFubm95YW5jZXM6IENhcm91c2VsTmV3cyA9IHtcbiAgYmFja2dyb3VuZEltYWdlOlxuICAgIFwiaHR0cHM6Ly9naXRsYWIuY29tL05hdG9Cb3JhbS9lbGRhcnlhLWVuaGFuY2VtZW50cy8tL3Jhdy9tYXN0ZXIvaW1hZ2VzL2Nhcm91c2VsX2JlZW1vb3ZfYW5ub3lhbmNlcy5wbmdcIixcbiAgaDQ6IHRyYW5zbGF0ZS5jYXJvdXNlbC5iZWVtb292X2Fubm95YW5jZXMudGl0bGUsXG4gIGhyZWY6IFwiaHR0cHM6Ly9naXRsYWIuY29tL05hdG9Cb3JhbS9CZWVtb292LUFubm95YW5jZXNcIixcbiAgaWQ6IFwiY2Fyb3VzZWwtYmVlbW9vdi1hbm5veWFuY2VzXCIsXG4gIHA6IHRyYW5zbGF0ZS5jYXJvdXNlbC5iZWVtb292X2Fubm95YW5jZXMuc3VidGl0bGUsXG59XG4iLCJpbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHR5cGUgeyBDYXJvdXNlbE5ld3MgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvY2Fyb3VzZWxfbmV3c1wiXG5cbmV4cG9ydCBjb25zdCBjYXJvdXNlbERvd25sb2FkRmFjZTogQ2Fyb3VzZWxOZXdzID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6XG4gICAgXCJodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvY2Fyb3VzZWxfZG93bmxvYWRfZmFjZS5wbmdcIixcbiAgaWQ6IFwiY2Fyb3VzZWwtZG93bmxvYWQtZmFjZVwiLFxuICBoNDogdHJhbnNsYXRlLmNhcm91c2VsLmRvd25sb2FkX2ZhY2UudGl0bGUsXG4gIHA6IHRyYW5zbGF0ZS5jYXJvdXNlbC5kb3dubG9hZF9mYWNlLnN1YnRpdGxlLFxufVxuIiwiaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB0eXBlIHsgQ2Fyb3VzZWxOZXdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2Nhcm91c2VsX25ld3NcIlxuXG5leHBvcnQgY29uc3QgY2Fyb3VzZWxEb3dubG9hZEd1YXJkaWFuOiBDYXJvdXNlbE5ld3MgPSB7XG4gIGJhY2tncm91bmRJbWFnZTpcbiAgICBcImh0dHBzOi8vZ2l0bGFiLmNvbS9OYXRvQm9yYW0vZWxkYXJ5YS1lbmhhbmNlbWVudHMvLS9yYXcvbWFzdGVyL2ltYWdlcy9jYXJvdXNlbF9kb3dubG9hZF9ndWFyZGlhbi5wbmdcIixcbiAgaWQ6IFwiY2Fyb3VzZWwtZG93bmxvYWQtZ3VhcmRpYW5cIixcbiAgaDQ6IHRyYW5zbGF0ZS5jYXJvdXNlbC5kb3dubG9hZF9ndWFyZGlhbi50aXRsZSxcbiAgcDogdHJhbnNsYXRlLmNhcm91c2VsLmRvd25sb2FkX2d1YXJkaWFuLnN1YnRpdGxlLFxufVxuIiwiaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB0eXBlIHsgQ2Fyb3VzZWxOZXdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2Nhcm91c2VsX25ld3NcIlxuXG5leHBvcnQgY29uc3QgY2Fyb3VzZWxFRTogQ2Fyb3VzZWxOZXdzID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6XG4gICAgXCJodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvY2Fyb3VzZWxfZWxkYXJ5YV9lbmhhbmNlbWVudHMucG5nXCIsXG4gIGg0OiB0cmFuc2xhdGUuY2Fyb3VzZWwuZWxkYXJ5YV9lbmhhbmNlbWVudHMudGl0bGUsXG4gIGhyZWY6IEdNLmluZm8uc2NyaXB0Lm5hbWVzcGFjZSxcbiAgaWQ6IFwiY2Fyb3VzZWwtZWxkYXJ5YS1lbmhhbmNlbWVudHNcIixcbiAgcDogdHJhbnNsYXRlLmNhcm91c2VsLmVsZGFyeWFfZW5oYW5jZW1lbnRzLnN1YnRpdGxlLFxufVxuIiwiaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB0eXBlIHsgQ2Fyb3VzZWxOZXdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2Nhcm91c2VsX25ld3NcIlxuXG5leHBvcnQgY29uc3QgY2Fyb3VzZWxUYWtlb3ZlcjogQ2Fyb3VzZWxOZXdzID0ge1xuICBiYWNrZ3JvdW5kSW1hZ2U6XG4gICAgXCJodHRwczovL2dpdGxhYi5jb20vTmF0b0JvcmFtL2VsZGFyeWEtZW5oYW5jZW1lbnRzLy0vcmF3L21hc3Rlci9pbWFnZXMvY2Fyb3VzZWxfdGFrZW92ZXIucG5nXCIsXG4gIGlkOiBcImNhcm91c2VsLXRha2VvdmVyXCIsXG4gIGg0OiB0cmFuc2xhdGUuY2Fyb3VzZWwudGFrZW92ZXIudGl0bGUsXG4gIHA6IHRyYW5zbGF0ZS5jYXJvdXNlbC50YWtlb3Zlci5zdWJ0aXRsZSxcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgY2Fyb3VzZWxCZWVtb292QW5ub3lhbmNlcyB9IGZyb20gXCIuLi9jYXJvdXNlbC9jYXJvdXNlbF9iZWVtb292X2Fubm95YW5jZXNcIlxuaW1wb3J0IHsgY2Fyb3VzZWxEb3dubG9hZEZhY2UgfSBmcm9tIFwiLi4vY2Fyb3VzZWwvY2Fyb3VzZWxfZG93bmxvYWRfZmFjZVwiXG5pbXBvcnQgeyBjYXJvdXNlbERvd25sb2FkR3VhcmRpYW4gfSBmcm9tIFwiLi4vY2Fyb3VzZWwvY2Fyb3VzZWxfZG93bmxvYWRfZ3VhcmRpYW5cIlxuaW1wb3J0IHsgY2Fyb3VzZWxFRSB9IGZyb20gXCIuLi9jYXJvdXNlbC9jYXJvdXNlbF9lbGRhcnlhX2VuaGFuY2VtZW50c1wiXG5pbXBvcnQgeyBjYXJvdXNlbFRha2VvdmVyIH0gZnJvbSBcIi4uL2Nhcm91c2VsL2Nhcm91c2VsX3Rha2VvdmVyXCJcbmltcG9ydCB7IGRvd25sb2FkRmFjZSwgZG93bmxvYWRHdWFyZGlhbiB9IGZyb20gXCIuLi9kb3dubG9hZC1jYW52YXNcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuaW1wb3J0IHsgU2Vzc2lvblN0b3JhZ2UgfSBmcm9tIFwiLi4vc2Vzc2lvbl9zdG9yYWdlL3Nlc3Npb25fc3RvcmFnZVwiXG5pbXBvcnQgeyB0b2dnbGVUYWtlb3ZlciB9IGZyb20gXCIuLi90YWtlb3Zlci9icmFpblwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQ2Fyb3VzZWwoKTogdm9pZCB7XG4gIGNvbnN0IGNhcm91c2VsSW5uZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2Nhcm91c2VsLWlubmVyXCIpXG4gIGlmICghY2Fyb3VzZWxJbm5lciB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmNhcm91c2VsLWVlXCIpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBJbXBvcnQgY2Fyb3VzZWwgdGVtcGxhdGVcbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2Nhcm91c2VsX25ld3MuaHRtbFwiKVxuXG4gIGNvbnN0IGNvbnRleHRzID0gW1xuICAgIC8vIEludHJvXG4gICAgY2Fyb3VzZWxFRSxcblxuICAgIC8vIEZlYXR1cmVzXG4gICAgLi4uKExvY2FsU3RvcmFnZS5taW5pZ2FtZXMgfHxcbiAgICBMb2NhbFN0b3JhZ2UuZXhwbG9yYXRpb25zIHx8XG4gICAgTG9jYWxTdG9yYWdlLm1hcmtldFxuICAgICAgPyBbY2Fyb3VzZWxUYWtlb3Zlcl1cbiAgICAgIDogW10pLFxuICAgIGNhcm91c2VsRG93bmxvYWRHdWFyZGlhbixcbiAgICBjYXJvdXNlbERvd25sb2FkRmFjZSxcblxuICAgIC8vIEFkc1xuICAgIGNhcm91c2VsQmVlbW9vdkFubm95YW5jZXMsXG4gIF1cblxuICAvLyBBZGQgZW50cmllcyB0byB0aGUgY2Fyb3VzZWxcbiAgY2Fyb3VzZWxJbm5lci5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICBjb250ZXh0cy5tYXAoYmFubmVyID0+IHRlbXBsYXRlLnJlbmRlcihiYW5uZXIpKS5qb2luKFwiXFxuXCIpXG4gIClcblxuICAvLyBBZGQgbGlua3NcbiAgZm9yIChjb25zdCBjYXJvdXNlbCBvZiBjb250ZXh0cykge1xuICAgIGlmICghY2Fyb3VzZWwuaHJlZikgY29udGludWVcblxuICAgIGNvbnN0IGVsZW1lbnQgPSBjYXJvdXNlbElubmVyLnF1ZXJ5U2VsZWN0b3IoYCMke2Nhcm91c2VsLmlkfWApXG4gICAgaWYgKCFlbGVtZW50KSBjb250aW51ZVxuXG4gICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYWN0aXZlXCIpKSBvcGVuKGNhcm91c2VsLmhyZWYsIFwiX2JsYW5rXCIpXG4gICAgfSlcbiAgfVxuXG4gIC8vIEFkZCBjbGljayBldmVudHNcblxuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChjYXJvdXNlbERvd25sb2FkRmFjZS5pZClcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBkb3dubG9hZEZhY2UpXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoY2Fyb3VzZWxEb3dubG9hZEd1YXJkaWFuLmlkKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGRvd25sb2FkR3VhcmRpYW4pXG5cbiAgY29uc3QgdGFrZW92ZXJBbmNob3IgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChjYXJvdXNlbFRha2VvdmVyLmlkKVxuICB0YWtlb3ZlckFuY2hvcj8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICB0b2dnbGVUYWtlb3ZlcigpXG4gICAgdGFrZW92ZXJUaXRsZSh0YWtlb3ZlckFuY2hvcilcbiAgfSlcblxuICBpZiAodGFrZW92ZXJBbmNob3IpIHRha2VvdmVyVGl0bGUodGFrZW92ZXJBbmNob3IpXG59XG5cbmZ1bmN0aW9uIHRha2VvdmVyVGl0bGUodGFrZW92ZXJBbmNob3I6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gIGNvbnN0IHRha2VvdmVySDQgPSB0YWtlb3ZlckFuY2hvci5xdWVyeVNlbGVjdG9yKFwiaDRcIilcbiAgaWYgKHRha2VvdmVySDQpIHtcbiAgICB0YWtlb3Zlckg0LmlubmVyVGV4dCA9IFNlc3Npb25TdG9yYWdlLnRha2VvdmVyXG4gICAgICA/IHRyYW5zbGF0ZS5jYXJvdXNlbC50YWtlb3Zlci5kaXNhYmxlX3Rha2VvdmVyXG4gICAgICA6IHRyYW5zbGF0ZS5jYXJvdXNlbC50YWtlb3Zlci5lbmFibGVfdGFrZW92ZXJcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgdHlwZSB7IFdpc2hlZEl0ZW0gfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS93aXNoZWRfaXRlbVwiXG5pbXBvcnQgdHlwZSB7IE1hcmtldEVudHJ5IH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL2ludGVyZmFjZXMvbWFya2V0X2VudHJ5XCJcbmltcG9ydCB7IGdldEl0ZW1EZXRhaWxzIH0gZnJvbSBcIi4uL21hcmtldHBsYWNlL21hcmtldHBsYWNlX2hhbmRsZXJzXCJcblxubGV0IG1hcmtldE9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyIHwgbnVsbFxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZE1hcmtldCgpOiB2b2lkIHtcbiAgbWFya2V0T2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKVxuICBtYXJrZXRPYnNlcnZlciA9IG51bGxcblxuICBpZiAobG9jYXRpb24ucGF0aG5hbWUgIT09IFwiL21hcmtldHBsYWNlXCIpIHJldHVyblxuXG4gIC8vIGAubWFya2V0cGxhY2Utc2VhcmNoLWl0ZW1zYCBpcyB0aGUgY29udGFpbmVyIHdob3NlIEhUTUwgY29udGVudCBpcyBiZWluZ1xuICAvLyByZXBsYWNlZCBvbiBldmVyeSBhY3Rpb24uXG4gIGNvbnN0IHNlYXJjaEl0ZW1zID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MVUxpc3RFbGVtZW50PihcbiAgICBcIi5tYXJrZXRwbGFjZS1zZWFyY2gtaXRlbXNcIlxuICApXG4gIGlmICghc2VhcmNoSXRlbXMpIHJldHVyblxuXG4gIG1hcmtldE9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobG9hZFdpc2hsaXN0KVxuICBtYXJrZXRPYnNlcnZlci5vYnNlcnZlKHNlYXJjaEl0ZW1zLCB7XG4gICAgY2hpbGRMaXN0OiB0cnVlLFxuICB9KVxuXG4gIGxvYWRXaXNobGlzdCgpXG59XG5cbmZ1bmN0aW9uIGxvYWRXaXNobGlzdCgpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBsaSBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxMSUVsZW1lbnQ+KFxuICAgIFwiLm1hcmtldHBsYWNlLWFic3RyYWN0XCJcbiAgKSkge1xuICAgIGxpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgICAgKF86IE11dGF0aW9uUmVjb3JkW10sIG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyKTogdm9pZCA9PiB7XG4gICAgICAgICAgY29uc3QgbWFya2V0RW50cnkgPSBnZXRJdGVtRGV0YWlscyhsaSlcbiAgICAgICAgICBpZiAoIW1hcmtldEVudHJ5KSByZXR1cm5cblxuICAgICAgICAgIGFkZFdpc2hpc3RCdXR0b24obWFya2V0RW50cnksIG9ic2VydmVyKVxuICAgICAgICB9XG4gICAgICApLm9ic2VydmUoPE5vZGU+ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYXJrZXRwbGFjZS16b29tXCIpLCB7XG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRXaXNoaXN0QnV0dG9uKFxuICBtYXJrZXRFbnRyeTogTWFya2V0RW50cnksXG4gIG9ic2VydmVyPzogTXV0YXRpb25PYnNlcnZlclxuKTogdm9pZCB7XG4gIGNvbnN0IGJ1dHRvbnNDb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PihcbiAgICBcIiNtYXJrZXRwbGFjZS1pdGVtRGV0YWlsXCJcbiAgKVxuICBpZiAoIWJ1dHRvbnNDb250YWluZXIpIHJldHVyblxuICBvYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gIGhpamFja0J1eUJ1dHRvbnMobWFya2V0RW50cnkpXG5cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYXJrZXRwbGFjZS1pdGVtRGV0YWlsLWluZm8tYXV0b2J1eVwiKT8ucmVtb3ZlKClcbiAgY29uc3QgYnV0dG9uVGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2F1dG9fYnV5X2J1dHRvbi5odG1sXCIpXG4gIGJ1dHRvbnNDb250YWluZXIuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgYnV0dG9uVGVtcGxhdGUucmVuZGVyKHsgdHJhbnNsYXRlIH0pXG4gIClcblxuICBidXR0b25zQ29udGFpbmVyXG4gICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiI21hcmtldHBsYWNlLWl0ZW1EZXRhaWwtaW5mby1hdXRvYnV5XCIpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgYWRkVG9XaXNobGlzdEZsYXZyKG1hcmtldEVudHJ5KVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIGFkZFRvV2lzaGxpc3RGbGF2cihtYXJrZXRFbnRyeTogTWFya2V0RW50cnkpOiB2b2lkIHtcbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2F1dG9fYnV5X2ZsYXZyLmh0bWxcIilcblxuICAkLmZsYXZyKHtcbiAgICBjb250ZW50OiB0ZW1wbGF0ZS5yZW5kZXIoeyB0cmFuc2xhdGUgfSksXG4gICAgYnV0dG9uczoge1xuICAgICAgY2xvc2U6IHsgc3R5bGU6IFwiY2xvc2VcIiB9LFxuICAgICAgc2F2ZToge1xuICAgICAgICBhY3Rpb246ICgpID0+IHNhdmUobWFya2V0RW50cnkpLFxuICAgICAgfSxcbiAgICB9LFxuICAgIGRpYWxvZzogXCJwcm9tcHRcIixcbiAgICBwcm9tcHQ6IHtcbiAgICAgIHZhbHVlOiBcIlwiLFxuICAgIH0sXG4gICAgb25CdWlsZDogJGNvbnRhaW5lciA9PiB7XG4gICAgICAkY29udGFpbmVyLmFkZENsYXNzKFwibmV3LWxheW91dC1wb3B1cFwiKVxuXG4gICAgICBkb2N1bWVudFxuICAgICAgICAucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcIi5mbGF2ci1wcm9tcHRcIilcbiAgICAgICAgPy5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgKHsga2V5IH0pID0+IHtcbiAgICAgICAgICBpZiAoa2V5ICE9PSBcIkVudGVyXCIpIHJldHVyblxuICAgICAgICAgIHNhdmUobWFya2V0RW50cnkpXG4gICAgICAgIH0pXG4gICAgfSxcbiAgfSlcbn1cblxuZnVuY3Rpb24gc2F2ZShtYXJrZXRFbnRyeTogTWFya2V0RW50cnkpOiBib29sZWFuIHtcbiAgY29uc3QgcHJpY2UgPSBOdW1iZXIoXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcIi5mbGF2ci1wcm9tcHRcIik/LnZhbHVlLnRyaW0oKVxuICApXG4gIGlmICghcHJpY2UgfHwgcHJpY2UgPD0gMCkge1xuICAgICQuZmxhdnJOb3RpZih0cmFuc2xhdGUubWFya2V0LmFkZF90b193aXNobGlzdC5pbnZhbGlkX3ByaWNlKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3Qgd2lzaGxpc3QgPSBMb2NhbFN0b3JhZ2Uud2lzaGxpc3QuZmlsdGVyKFxuICAgIHdpc2hsaXN0RW50cnkgPT4gd2lzaGxpc3RFbnRyeS5pY29uICE9PSBtYXJrZXRFbnRyeS5pY29uXG4gIClcbiAgY29uc3Qgd2lzaGVkOiBXaXNoZWRJdGVtID0geyAuLi5tYXJrZXRFbnRyeSwgcHJpY2UgfVxuICB3aXNobGlzdC5wdXNoKHdpc2hlZClcbiAgTG9jYWxTdG9yYWdlLndpc2hsaXN0ID0gd2lzaGxpc3RcblxuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvZmxhdnJfbm90aWYvaWNvbl9tZXNzYWdlLmh0bWxcIilcbiAgJC5mbGF2ck5vdGlmKFxuICAgIHRlbXBsYXRlLnJlbmRlcih7XG4gICAgICAuLi53aXNoZWQsXG4gICAgICBtZXNzYWdlOiB0cmFuc2xhdGUubWFya2V0LmFkZF90b193aXNobGlzdC5hZGRlZF90b193aXNobGlzdChcbiAgICAgICAgd2lzaGVkLm5hbWUsXG4gICAgICAgIHdpc2hlZC5wcmljZVxuICAgICAgKSxcbiAgICB9KVxuICApXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGhpamFja0J1eUJ1dHRvbnMobWFya2V0RW50cnk6IE1hcmtldEVudHJ5KTogdm9pZCB7XG4gIGRvY3VtZW50XG4gICAgLnF1ZXJ5U2VsZWN0b3IoXCIubWFya2V0cGxhY2UtaXRlbURldGFpbC1iaWQtcHJlcGFyZVwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIGFkZFB1cmNoYXNlKG1hcmtldEVudHJ5KVxuICAgIH0pXG5cbiAgZG9jdW1lbnRcbiAgICAucXVlcnlTZWxlY3RvcihcIi5tYXJrZXRwbGFjZS1pdGVtRGV0YWlsLWJ1eVwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIGFkZFB1cmNoYXNlKG1hcmtldEVudHJ5KVxuICAgIH0pXG59XG5cbmZ1bmN0aW9uIGFkZFB1cmNoYXNlKG1hcmtldEVudHJ5OiBNYXJrZXRFbnRyeSk6IHZvaWQge1xuICBMb2NhbFN0b3JhZ2UucHVyY2hhc2VzID0gW1xuICAgIG1hcmtldEVudHJ5LFxuICAgIC4uLkxvY2FsU3RvcmFnZS5wdXJjaGFzZXMuZmlsdGVyKFxuICAgICAgcHVyY2hhc2UgPT4gcHVyY2hhc2UuaXRlbWlkICE9PSBtYXJrZXRFbnRyeS5pdGVtaWRcbiAgICApLFxuICBdXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IGNoYW5nZVJlZ2lvbiB9IGZyb20gXCIuLi9hamF4L2NoYW5nZV9yZWdpb25cIlxuaW1wb3J0IHsgUmVzdWx0IH0gZnJvbSBcIi4uL2FwaS9yZXN1bHQuZW51bVwiXG5pbXBvcnQgdHlwZSB7IE1hcFJlZ2lvbiB9IGZyb20gXCIuLi9lbGRhcnlhL2N1cnJlbnRfcmVnaW9uXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgdHlwZSB7IEF1dG9FeHBsb3JlTG9jYXRpb24gfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9hdXRvX2V4cGxvcmVfbG9jYXRpb25cIlxuaW1wb3J0IHsgTG9jYWxTdG9yYWdlIH0gZnJvbSBcIi4uL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5pbXBvcnQgdHlwZSB7IEF1dG9FeHBsb3JlQnV0dG9uIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL2F1dG9fZXhwbG9yZV9idXR0b25cIlxuXG5sZXQgcGV0T2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIgfCBudWxsXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUGV0KCk6IHZvaWQge1xuICBwZXRPYnNlcnZlcj8uZGlzY29ubmVjdCgpXG4gIHBldE9ic2VydmVyID0gbnVsbFxuXG4gIGlmIChsb2NhdGlvbi5wYXRobmFtZSAhPT0gXCIvcGV0XCIpIHJldHVyblxuXG4gIC8vIGAucGFnZS1tYWluLWNvbnRhaW5lcmAgY2hhbmdlcyBiYWNrZ3JvdW5kIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudGx5XG4gIC8vIHNlbGVjdGVkIHJlZ2lvbi5cbiAgY29uc3QgbWFpbkNvbnRhaW5lciA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgIFwiLnBhZ2UtbWFpbi1jb250YWluZXJcIlxuICApXG4gIGlmICghbWFpbkNvbnRhaW5lcikgcmV0dXJuXG5cbiAgcGV0T2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihsb2FkUGV0KVxuICBwZXRPYnNlcnZlci5vYnNlcnZlKG1haW5Db250YWluZXIsIHtcbiAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICB9KVxuXG4gIGxvYWRFeHBsb3JhdGlvbnMoKVxufVxuXG5mdW5jdGlvbiBsb2FkRXhwbG9yYXRpb25zKCk6IHZvaWQge1xuICBjb25zdCBhdXRvRXhwbG9yZUxvY2F0aW9ucyA9IExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9uc1xuXG4gIGZvciAoY29uc3QgZGl2IG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTERpdkVsZW1lbnQ+KFxuICAgIFwiLm1hcC1sb2NhdGlvbltkYXRhLWlkXVwiXG4gICkpIHtcbiAgICBjb25zdCBsb2NhdGlvbklkID0gTnVtYmVyKGRpdi5nZXRBdHRyaWJ1dGUoXCJkYXRhLWlkXCIpKVxuICAgIGlmICghbG9jYXRpb25JZCkgY29udGludWVcblxuICAgIGxvYWRQaWN0b01hcChhdXRvRXhwbG9yZUxvY2F0aW9ucywgZGl2KVxuXG4gICAgZGl2LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgICAgKF86IE11dGF0aW9uUmVjb3JkW10sIG9ic2VydmVyOiBNdXRhdGlvbk9ic2VydmVyKTogdm9pZCA9PiB7XG4gICAgICAgICAgYWRkQXV0b0V4cGxvcmVCdXR0b24obG9jYXRpb25JZCwgb2JzZXJ2ZXIpXG4gICAgICAgIH1cbiAgICAgICkub2JzZXJ2ZSg8Tm9kZT5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hcC1sb2NhdGlvbi1wcmV2aWV3XCIpLCB7XG4gICAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICB9KVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQXV0b0V4cGxvcmVCdXR0b24oXG4gIGxvY2F0aW9uSWQ6IG51bWJlcixcbiAgb2JzZXJ2ZXI/OiBNdXRhdGlvbk9ic2VydmVyXG4pOiB2b2lkIHtcbiAgY29uc3QgYnV0dG9uc0NvbnRhaW5lciA9XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXCIjYnV0dG9ucy1jb250YWluZXJcIilcbiAgaWYgKCFidXR0b25zQ29udGFpbmVyKSByZXR1cm5cbiAgb2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKVxuXG4gIC8vIFBhcmFtZXRlcnMgdG8gYmUgaW5qZWN0ZWQgaW50byB0aGUgdGVtcGxhdGVcbiAgY29uc3QgY29udGV4dDogQXV0b0V4cGxvcmVCdXR0b24gPSB7XG4gICAgbG9jYXRpb25JZCxcbiAgICBhY3RpdmU6IExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucy5zb21lKFxuICAgICAgc2F2ZWQgPT4gc2F2ZWQubG9jYXRpb24uaWQgPT09IGxvY2F0aW9uSWQudG9TdHJpbmcoKVxuICAgICksXG4gICAgcmVnaW9uSWQ6IE51bWJlcihcbiAgICAgIGRvY3VtZW50XG4gICAgICAgIC5xdWVyeVNlbGVjdG9yKFwiLm1pbmltYXAuY3VycmVudFtkYXRhLW1hcGlkXVwiKVxuICAgICAgICA/LmdldEF0dHJpYnV0ZShcImRhdGEtbWFwaWRcIilcbiAgICApLFxuICB9XG5cbiAgLy8gQWRkIHRoZSBhdXRvIGV4cGxvcmUgYnV0dG9uXG4gIGJ1dHRvbnNDb250YWluZXIucXVlcnlTZWxlY3RvcihcIiNhdXRvLWV4cGxvcmUtYnV0dG9uXCIpPy5yZW1vdmUoKVxuICBjb25zdCBhdXRvRXhwbG9yZVRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC9hdXRvX2V4cGxvcmVfYnV0dG9uLmh0bWxcIilcbiAgYnV0dG9uc0NvbnRhaW5lci5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICBhdXRvRXhwbG9yZVRlbXBsYXRlLnJlbmRlcih7IC4uLmNvbnRleHQsIHRyYW5zbGF0ZSB9KVxuICApXG5cbiAgLy8gQmluZCBgYXV0b0V4cGxvcmVgIGFuZCBgbG9hZFBpY3RvTWFwc2BcbiAgYnV0dG9uc0NvbnRhaW5lclxuICAgIC5xdWVyeVNlbGVjdG9yPEhUTUxCdXR0b25FbGVtZW50PihcIiNhdXRvLWV4cGxvcmUtYnV0dG9uXCIpXG4gICAgPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgICAgdm9pZCBhdXRvRXhwbG9yZShjb250ZXh0KS50aGVuKGxvYWRQaWN0b01hcHMpXG4gICAgfSlcblxuICB2b2lkIGRpc2FibGVFeHBsb3JlKGNvbnRleHQpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRpc2FibGVFeHBsb3JlKGNvbnRleHQ6IEF1dG9FeHBsb3JlQnV0dG9uKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGVudHJ5ID0gYXdhaXQgZ2V0QXV0b0V4cGxvcmVFbnRyeShjb250ZXh0LnJlZ2lvbklkLCBjb250ZXh0LmxvY2F0aW9uSWQpXG4gIGlmICghZW50cnkpIHJldHVyblxuXG4gIGlmIChwZXRFbmVyZ3kgPCBOdW1iZXIoZW50cnkubG9jYXRpb24uZW5lcmd5UmVxdWlyZWQpKVxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZXhwbG9yZS1idXR0b25cIik/LmNsYXNzTGlzdC5hZGQoXCJkaXNhYmxlZFwiKVxufVxuXG5hc3luYyBmdW5jdGlvbiBhdXRvRXhwbG9yZShjb250ZXh0OiBBdXRvRXhwbG9yZUJ1dHRvbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoY29udGV4dC5hY3RpdmUpIHtcbiAgICBjb25zdCBmaWx0ZXJlZExvY2F0aW9ucyA9IExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucy5maWx0ZXIoXG4gICAgICBzYXZlZCA9PiBzYXZlZC5sb2NhdGlvbi5pZCAhPT0gY29udGV4dC5sb2NhdGlvbklkLnRvU3RyaW5nKClcbiAgICApXG4gICAgTG9jYWxTdG9yYWdlLmF1dG9FeHBsb3JlTG9jYXRpb25zID0gZmlsdGVyZWRMb2NhdGlvbnNcbiAgICBhZGRBdXRvRXhwbG9yZUJ1dHRvbihjb250ZXh0LmxvY2F0aW9uSWQpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBuZXdBdXRvRXhwbG9yZSA9IGF3YWl0IGdldEF1dG9FeHBsb3JlRW50cnkoXG4gICAgY29udGV4dC5yZWdpb25JZCxcbiAgICBjb250ZXh0LmxvY2F0aW9uSWRcbiAgKVxuICBpZiAoIW5ld0F1dG9FeHBsb3JlKSByZXR1cm5cblxuICBjb25zdCBuZXdMb2NhdGlvbnMgPSBMb2NhbFN0b3JhZ2UuYXV0b0V4cGxvcmVMb2NhdGlvbnNcbiAgbmV3TG9jYXRpb25zLnB1c2gobmV3QXV0b0V4cGxvcmUpXG4gIExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9ucyA9IG5ld0xvY2F0aW9uc1xuICBhZGRBdXRvRXhwbG9yZUJ1dHRvbihjb250ZXh0LmxvY2F0aW9uSWQpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldEF1dG9FeHBsb3JlRW50cnkoXG4gIHJlZ2lvbklkOiBudW1iZXIsXG4gIGxvY2F0aW9uSWQ6IG51bWJlclxuKTogUHJvbWlzZTxBdXRvRXhwbG9yZUxvY2F0aW9uIHwgbnVsbD4ge1xuICBjb25zdCByZWdpb24gPSBhd2FpdCBnZXRSZWdpb24ocmVnaW9uSWQpXG4gIGlmICghcmVnaW9uKSByZXR1cm4gbnVsbFxuXG4gIGNvbnN0IGxvY2F0aW9uID0gcmVnaW9uLmxvY2F0aW9ucy5maW5kKFxuICAgIGxvY2F0aW9uID0+IGxvY2F0aW9uLmlkID09PSBsb2NhdGlvbklkLnRvU3RyaW5nKClcbiAgKVxuICBpZiAoIWxvY2F0aW9uKSByZXR1cm4gbnVsbFxuXG4gIHJldHVybiB7XG4gICAgbG9jYXRpb24sXG4gICAgcmVnaW9uLFxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlZ2lvbihpZDogbnVtYmVyKTogUHJvbWlzZTxNYXBSZWdpb24gfCBudWxsPiB7XG4gIGlmIChpZC50b1N0cmluZygpID09PSBjdXJyZW50UmVnaW9uLmlkKSByZXR1cm4gY3VycmVudFJlZ2lvblxuXG4gIGNvbnN0IGpzb24gPSBhd2FpdCBjaGFuZ2VSZWdpb24oaWQpXG4gIGlmIChqc29uLnJlc3VsdCA9PT0gUmVzdWx0LnN1Y2Nlc3MpIHJldHVybiBqc29uLmRhdGEuY3VycmVudFJlZ2lvblxuXG4gIHJldHVybiBudWxsXG59XG5cbi8vIFBpY3RvIG1hcFxuXG5mdW5jdGlvbiBsb2FkUGljdG9NYXBzKCk6IHZvaWQge1xuICBjb25zdCBhdXRvRXhwbG9yZUxvY2F0aW9ucyA9IExvY2FsU3RvcmFnZS5hdXRvRXhwbG9yZUxvY2F0aW9uc1xuICBmb3IgKGNvbnN0IGRpdiBvZiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxEaXZFbGVtZW50PihcbiAgICBcIi5tYXAtbG9jYXRpb25bZGF0YS1pZF1cIlxuICApKSB7XG4gICAgbG9hZFBpY3RvTWFwKGF1dG9FeHBsb3JlTG9jYXRpb25zLCBkaXYpXG4gIH1cbn1cblxuZnVuY3Rpb24gbG9hZFBpY3RvTWFwKFxuICBhdXRvRXhwbG9yZUxvY2F0aW9uczogQXV0b0V4cGxvcmVMb2NhdGlvbltdLFxuICBkaXY6IEhUTUxEaXZFbGVtZW50XG4pOiB2b2lkIHtcbiAgY29uc3QgbWFwTG9jYXRpb24gPSBkaXYuZ2V0QXR0cmlidXRlKFwiZGF0YS1pZFwiKVxuICBpZiAoIW1hcExvY2F0aW9uKSByZXR1cm5cblxuICBkaXYuc3R5bGUuYmFja2dyb3VuZEltYWdlID0gYXV0b0V4cGxvcmVMb2NhdGlvbnMuc29tZShcbiAgICBzYXZlZCA9PiBzYXZlZC5sb2NhdGlvbi5pZCA9PT0gbWFwTG9jYXRpb25cbiAgKVxuICAgID8gXCJ1cmwoL3N0YXRpYy9pbWcvbmV3LWxheW91dC9wZXQvaWNvbnMvcGljdG9fbWFwX2V4cGxvLnBuZylcIlxuICAgIDogXCJ1cmwoL3N0YXRpYy9pbWcvbmV3LWxheW91dC9wZXQvaWNvbnMvcGljdG9fbWFwLnBuZylcIlxufVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyBkb3dubG9hZFByb2ZpbGUgfSBmcm9tIFwiLi4vZG93bmxvYWQtY2FudmFzXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBleHBvcnRPdXRmaXQgfSBmcm9tIFwiLi4vb3V0Zml0XCJcbmltcG9ydCB0eXBlIHsgUHJvZmlsZUNvbnRhY3RBY3Rpb24gfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvcHJvZmlsZV9jb250YWN0X2FjdGlvblwiXG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkUHJvZmlsZSgpOiB2b2lkIHtcbiAgY29uc3QgcHJvZmlsZUNvbnRhY3RBY3Rpb25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXG4gICAgXCJwcm9maWxlLWNvbnRhY3QtYWN0aW9uc1wiXG4gIClcbiAgaWYgKFxuICAgICFwcm9maWxlQ29udGFjdEFjdGlvbnMgfHxcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLnByb2ZpbGUtY29udGFjdC1hY3Rpb24tZWVcIilcbiAgKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvcHJvZmlsZV9jb250YWN0X2FjdGlvbi5odG1sXCIpXG5cbiAgY29uc3QgcHJvZmlsZUFjdGlvbkV4cG9ydDogUHJvZmlsZUNvbnRhY3RBY3Rpb24gPSB7XG4gICAgaWQ6IFwicHJvZmlsZS1jb250YWN0LWFjdGlvbi1leHBvcnRcIixcbiAgICBhY3Rpb25EZXNjcmlwdGlvbjogdHJhbnNsYXRlLnByb2ZpbGUuZXhwb3J0X291dGZpdCxcbiAgfVxuICBjb25zdCBwcm9maWxlQWN0aW9uRG93bmxvYWQ6IFByb2ZpbGVDb250YWN0QWN0aW9uID0ge1xuICAgIGlkOiBcInByb2ZpbGUtY29udGFjdC1hY3Rpb24tZG93bmxvYWRcIixcbiAgICBhY3Rpb25EZXNjcmlwdGlvbjogdHJhbnNsYXRlLnByb2ZpbGUuZG93bmxvYWRfb3V0Zml0LFxuICB9XG5cbiAgLy8gQWRkIGVudHJpZXNcbiAgcHJvZmlsZUNvbnRhY3RBY3Rpb25zLmluc2VydEFkamFjZW50SFRNTChcbiAgICBcImJlZm9yZWVuZFwiLFxuICAgIHRlbXBsYXRlLnJlbmRlcihwcm9maWxlQWN0aW9uRXhwb3J0KVxuICApXG4gIHByb2ZpbGVDb250YWN0QWN0aW9ucy5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICB0ZW1wbGF0ZS5yZW5kZXIocHJvZmlsZUFjdGlvbkRvd25sb2FkKVxuICApXG5cbiAgLy8gQWRkIGNsaWNrIGV2ZW50c1xuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChwcm9maWxlQWN0aW9uRXhwb3J0LmlkKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGV4cG9ydFByb2ZpbGUpXG4gIGRvY3VtZW50XG4gICAgLmdldEVsZW1lbnRCeUlkKHByb2ZpbGVBY3Rpb25Eb3dubG9hZC5pZClcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBkb3dubG9hZFByb2ZpbGUpXG59XG5cbmZ1bmN0aW9uIGV4cG9ydFByb2ZpbGUoKTogdm9pZCB7XG4gIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSGVhZGluZ0VsZW1lbnQ+KFxuICAgIFwiI21haW4tc2VjdGlvbiAuc2VjdGlvbi10aXRsZVwiXG4gIClcblxuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoU2FjaGEuQXZhdGFyLmF2YXRhcnMpLmZpbHRlcihrZXkgPT5cbiAgICBrZXkuc3RhcnRzV2l0aChcIiNwbGF5ZXJQcm9maWxlQXZhdGFyXCIpXG4gIClcblxuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgZXhwb3J0T3V0Zml0KGtleSwgdGl0bGU/LnRleHRDb250ZW50Py50cmltKCkpXG4gIH1cbn1cbiIsImltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuaW1wb3J0IHR5cGUgeyBJdGVtRm9yU2FsZURhdGFJdGVtIH0gZnJvbSBcIi4uL3NlbGwvaXRlbV9mb3Jfc2FsZV9kYXRhX2l0ZW1cIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZFNlbGwoKTogdm9pZCB7XG4gIGlmIChsb2NhdGlvbi5wYXRobmFtZSAhPT0gXCIvbWFya2V0cGxhY2Uvc2VsbFwiKSByZXR1cm5cbiAgY29uc3QgaXRlbXNGb3JTYWxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MVUxpc3RFbGVtZW50PihcbiAgICBcIi5tYXJrZXRwbGFjZS1pdGVtc0ZvclNhbGUtaXRlbXNcIlxuICApXG4gIGlmICghaXRlbXNGb3JTYWxlKSByZXR1cm5cblxuICBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG4gICAgaGFuZGxlSXRlbXNGb3JTYWxlKGl0ZW1zRm9yU2FsZSlcbiAgfSkub2JzZXJ2ZShpdGVtc0ZvclNhbGUsIHsgY2hpbGRMaXN0OiB0cnVlIH0pXG59XG5cbmZ1bmN0aW9uIGhhbmRsZUl0ZW1zRm9yU2FsZShpdGVtc0ZvclNhbGU6IEhUTUxVTGlzdEVsZW1lbnQpOiB2b2lkIHtcbiAgY29uc3QgbGlzID0gaXRlbXNGb3JTYWxlLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTExJRWxlbWVudD4oXCJsaVwiKVxuXG4gIGZvciAoY29uc3QgbGkgb2YgbGlzKSB7XG4gICAgbGkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIGNvbnN0IGRhdGFJdGVtOiBJdGVtRm9yU2FsZURhdGFJdGVtID0gSlNPTi5wYXJzZShsaS5kYXRhc2V0Lml0ZW0gPz8gXCJ7fVwiKVxuICAgICAgY29uc3QgaWNvbiA9IGxpLnF1ZXJ5U2VsZWN0b3I8SFRNTEltYWdlRWxlbWVudD4oXCJpbWdcIik/LnNyY1xuICAgICAgaWYgKCFpY29uKSByZXR1cm5cblxuICAgICAgY29uc3Qgc2FsZURldGFpbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFxuICAgICAgICBcIiNtYXJrZXRwbGFjZS1zYWxlRGV0YWlsXCJcbiAgICAgIClcbiAgICAgIGlmICghc2FsZURldGFpbCkgcmV0dXJuXG5cbiAgICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgICAoXzogTXV0YXRpb25SZWNvcmRbXSwgb2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICBjb25zdCBzZWxsQnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oXG4gICAgICAgICAgICBcIi5tYXJrZXRwbGFjZS1pdGVtRGV0YWlsLXNlbGxcIlxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAoIXNlbGxCdXR0b24pIHJldHVyblxuICAgICAgICAgIG9ic2VydmVyLmRpc2Nvbm5lY3QoKVxuXG4gICAgICAgICAgaGFuZGxlU2VsbEJ1dHRvbihzZWxsQnV0dG9uLCBkYXRhSXRlbSwgaWNvbilcbiAgICAgICAgfVxuICAgICAgKS5vYnNlcnZlKHNhbGVEZXRhaWwsIHsgY2hpbGRMaXN0OiB0cnVlIH0pXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVTZWxsQnV0dG9uKFxuICBpdGVtRGV0YWlsU2VsbDogSFRNTERpdkVsZW1lbnQsXG4gIGRhdGFJdGVtOiBJdGVtRm9yU2FsZURhdGFJdGVtLFxuICBpY29uOiBzdHJpbmdcbik6IHZvaWQge1xuICBpdGVtRGV0YWlsU2VsbC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIGNvbnN0IGN1cnJlbnRQcmljZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oXG4gICAgICBcIiNtYXJrZXRwbGFjZS1zYWxlRGV0YWlsLWN1cnJlbnRQcmljZVwiXG4gICAgKT8udmFsdWVcbiAgICBjb25zdCBidXlOb3dQcmljZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oXG4gICAgICBcIiNtYXJrZXRwbGFjZS1zYWxlRGV0YWlsLWJ1eU5vd1ByaWNlXCJcbiAgICApPy52YWx1ZVxuXG4gICAgaWYgKCFjdXJyZW50UHJpY2UgfHwgIWJ1eU5vd1ByaWNlKSByZXR1cm5cblxuICAgIExvY2FsU3RvcmFnZS5zYWxlcyA9IFtcbiAgICAgIHtcbiAgICAgICAgLi4uZGF0YUl0ZW0sXG4gICAgICAgIGN1cnJlbnRQcmljZTogTnVtYmVyKGN1cnJlbnRQcmljZSksXG4gICAgICAgIGJ1eU5vd1ByaWNlOiBOdW1iZXIoYnV5Tm93UHJpY2UpLFxuICAgICAgICBpY29uLFxuICAgICAgICBkYXRlOiBuZXcgRGF0ZSgpLFxuICAgICAgfSxcbiAgICAgIC4uLkxvY2FsU3RvcmFnZS5zYWxlcyxcbiAgICBdXG4gIH0pXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IGdldE5hbWUgfSBmcm9tIFwiLi4vZG93bmxvYWQtY2FudmFzXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgeyBMb2NhbFN0b3JhZ2UgfSBmcm9tIFwiLi4vbG9jYWxfc3RvcmFnZS9sb2NhbF9zdG9yYWdlXCJcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYWNjb3VudFJpZ2h0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhY2NvdW50LXJpZ2h0IGRpdlwiKVxuICBpZiAoIWFjY291bnRSaWdodCB8fCBhY2NvdW50UmlnaHQucXVlcnlTZWxlY3RvcihcIi5hY2NvdW50LWVlLWJsb2NcIikpIHJldHVyblxuXG4gIGNvbnN0IHNldHRpbmdzVGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL3NldHRpbmdzLmh0bWxcIilcblxuICBhY2NvdW50UmlnaHQuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgc2V0dGluZ3NUZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgLi4uKGF3YWl0IExvY2FsU3RvcmFnZS5nZXRTZXR0aW5ncygpKSxcbiAgICAgIHRyYW5zbGF0ZSxcbiAgICB9KVxuICApXG5cbiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlZS1kZWJ1Zy1lbmFibGVkXCIpPy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIExvY2FsU3RvcmFnZS5kZWJ1ZyA9ICFMb2NhbFN0b3JhZ2UuZGVidWdcbiAgICByZWxvYWRTZXR0aW5ncygpXG4gIH0pXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoXCJlZS1taW5pZ2FtZXMtZW5hYmxlZFwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIExvY2FsU3RvcmFnZS5taW5pZ2FtZXMgPSAhTG9jYWxTdG9yYWdlLm1pbmlnYW1lc1xuICAgICAgcmVsb2FkU2V0dGluZ3MoKVxuICAgIH0pXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoXCJlZS1leHBsb3JhdGlvbnMtZW5hYmxlZFwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIExvY2FsU3RvcmFnZS5leHBsb3JhdGlvbnMgPSAhTG9jYWxTdG9yYWdlLmV4cGxvcmF0aW9uc1xuICAgICAgcmVsb2FkU2V0dGluZ3MoKVxuICAgIH0pXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoXCJlZS1tYXJrZXQtZW5hYmxlZFwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgIExvY2FsU3RvcmFnZS5tYXJrZXQgPSAhTG9jYWxTdG9yYWdlLm1hcmtldFxuICAgICAgcmVsb2FkU2V0dGluZ3MoKVxuICAgIH0pXG5cbiAgZG9jdW1lbnRcbiAgICAuZ2V0RWxlbWVudEJ5SWQoXCJlZS1pbXBvcnRcIilcbiAgICA/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBpbXBvcnRTZXR0aW5ncylcblxuICBkb2N1bWVudFxuICAgIC5nZXRFbGVtZW50QnlJZChcImVlLWV4cG9ydFwiKVxuICAgID8uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHZvaWQgZXhwb3J0U2V0dGluZ3MoKSlcbn1cblxuZnVuY3Rpb24gcmVsb2FkU2V0dGluZ3MoKTogdm9pZCB7XG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpdkVsZW1lbnQ+KFwiLmFjY291bnQtZWUtYmxvY1wiKT8ucmVtb3ZlKClcbiAgdm9pZCBsb2FkU2V0dGluZ3MoKVxufVxuXG5mdW5jdGlvbiBpbXBvcnRTZXR0aW5ncygpOiB2b2lkIHtcbiAgY29uc3QgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIilcbiAgaW5wdXQuc2V0QXR0cmlidXRlKFwidHlwZVwiLCBcImZpbGVcIilcbiAgaW5wdXQuc2V0QXR0cmlidXRlKFwiYWNjZXB0XCIsIFwiYXBwbGljYXRpb24vanNvblwiKVxuICBpbnB1dC5jbGljaygpXG5cbiAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIGV2ZW50ID0+IHtcbiAgICBpZiAoIWV2ZW50LnRhcmdldCkgcmV0dXJuXG4gICAgY29uc3QgZmlsZXMgPSAoPEhUTUxJbnB1dEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5maWxlc1xuICAgIGlmICghZmlsZXMpIHJldHVyblxuICAgIGNvbnN0IGZpbGUgPSBmaWxlc1swXVxuICAgIGlmICghZmlsZSkgcmV0dXJuXG4gICAgdm9pZCBmaWxlLnRleHQoKS50aGVuKGFzeW5jIHZhbHVlID0+IHtcbiAgICAgIGlmICghdmFsdWUpIHJldHVyblxuXG4gICAgICBhd2FpdCBMb2NhbFN0b3JhZ2Uuc2V0U2V0dGluZ3MoSlNPTi5wYXJzZSh2YWx1ZSkpXG5cbiAgICAgIHJlbG9hZFNldHRpbmdzKClcbiAgICAgICQuZmxhdnJOb3RpZih0cmFuc2xhdGUuYWNjb3VudC5pbXBvcnRlZClcbiAgICB9KVxuICB9KVxufVxuXG5hc3luYyBmdW5jdGlvbiBleHBvcnRTZXR0aW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgaHJlZiA9XG4gICAgXCJkYXRhOnRleHQvanNvbjtjaGFyc2V0PXV0Zi04LFwiICtcbiAgICBlbmNvZGVVUklDb21wb25lbnQoXG4gICAgICBKU09OLnN0cmluZ2lmeShhd2FpdCBMb2NhbFN0b3JhZ2UuZ2V0U2V0dGluZ3MoKSwgbnVsbCwgMilcbiAgICApXG5cbiAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpXG4gIGEuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBocmVmKVxuICBhLnNldEF0dHJpYnV0ZShcbiAgICBcImRvd25sb2FkXCIsXG4gICAgYCR7Z2V0TmFtZSgpID8/IFwiZWxkYXJ5YS1lbmhhbmNlbWVudHNcIn0tc2V0dGluZ3MuanNvbmBcbiAgKVxuICBhLmNsaWNrKClcbn1cbiIsImltcG9ydCB0eXBlIHsgVGVtcGxhdGUgfSBmcm9tIFwiaG9nYW4uanNcIlxuaW1wb3J0IHsgdHJhbnNsYXRlIH0gZnJvbSBcIi4uL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuLi9sb2NhbF9zdG9yYWdlL2xvY2FsX3N0b3JhZ2VcIlxuaW1wb3J0IHR5cGUgeyBXaXNobGlzdFNldHRpbmdzIH0gZnJvbSBcIi4uL3RlbXBsYXRlcy9pbnRlcmZhY2VzL3dpc2hsaXN0X3NldHRpbmdzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRXaXNobGlzdCgpOiB2b2lkIHtcbiAgY29uc3QgbWFya2V0cGxhY2VNZW51ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYXJrZXRwbGFjZS1tZW51XCIpXG4gIGlmICghbWFya2V0cGxhY2VNZW51KSByZXR1cm5cblxuICBpZiAoIW1hcmtldHBsYWNlTWVudS5xdWVyeVNlbGVjdG9yKFwiI3dpc2hsaXN0LWJ1dHRvblwiKSkge1xuICAgIGZvciAoY29uc3QgYSBvZiBtYXJrZXRwbGFjZU1lbnUucXVlcnlTZWxlY3RvckFsbChcImFcIikpIHtcbiAgICAgIGEuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgcGFnZUxvYWQoYS5ocmVmLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB0cnVlKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBtYXJrZXRwbGFjZU1lbnUucXVlcnlTZWxlY3RvcihcIiN3aXNobGlzdC1idXR0b25cIik/LnJlbW92ZSgpXG4gIGNvbnN0IHdpc2hsaXN0QnV0dG9uVGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL3dpc2hsaXN0X2J1dHRvbi5odG1sXCIpXG4gIG1hcmtldHBsYWNlTWVudS5pbnNlcnRBZGphY2VudEhUTUwoXG4gICAgXCJiZWZvcmVlbmRcIixcbiAgICB3aXNobGlzdEJ1dHRvblRlbXBsYXRlLnJlbmRlcih7IHRyYW5zbGF0ZSB9KVxuICApXG5cbiAgY29uc3Qgd2lzaGxpc3RCdXR0b24gPVxuICAgIG1hcmtldHBsYWNlTWVudS5xdWVyeVNlbGVjdG9yPEhUTUxBbmNob3JFbGVtZW50PihcIiN3aXNobGlzdC1idXR0b25cIilcbiAgd2lzaGxpc3RCdXR0b24/LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgaW5zZXJ0V2lzaGxpc3Qod2lzaGxpc3RCdXR0b24pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGluc2VydFdpc2hsaXN0KGJ1dHRvbjogSFRNTEFuY2hvckVsZW1lbnQpOiB2b2lkIHtcbiAgLy8gQXNzaXN0YW5jZVxuICBjb25zdCBhc3Npc3RhbmNlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5tYXJrZXRwbGFjZS1hc3Npc3RhbmNlXCIpXG4gIGlmIChhc3Npc3RhbmNlKSBhc3Npc3RhbmNlLnRleHRDb250ZW50ID0gdHJhbnNsYXRlLm1hcmtldC53aXNobGlzdC5hc3Npc3RhbmNlXG5cbiAgLy8gTWVudVxuICBkb2N1bWVudFxuICAgIC5xdWVyeVNlbGVjdG9yKFwiI21hcmtldHBsYWNlLW1lbnUgLmFjdGl2ZVwiKVxuICAgID8uY2xhc3NMaXN0LnJlbW92ZShcImFjdGl2ZVwiKVxuICBidXR0b24uY2xhc3NMaXN0LmFkZChcImFjdGl2ZVwiKVxuXG4gIC8vIEZpbHRlcnNcbiAgY29uc3QgZmlsdGVycyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFya2V0cGxhY2UtZmlsdGVyc1wiKVxuICBpZiAoZmlsdGVycykgZmlsdGVycy5pbm5lckhUTUwgPSBcIlwiXG5cbiAgLy8gQ29udGVudFxuICBjb25zdCB3aXNobGlzdFRlbXBsYXRlOiBUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi90ZW1wbGF0ZXMvaHRtbC93aXNobGlzdF9zZXR0aW5ncy5odG1sXCIpXG4gIGNvbnN0IGNvbnRhaW5lciA9XG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5tYXJrZXRwbGFjZS1jb250YWluZXJcIikgPz9cbiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1hcmtldHBsYWNlLWFjdGl2ZS1hdWN0aW9uc1wiKSA/P1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFya2V0cGxhY2UtaXRlbXNGb3JTYWxlXCIpXG4gIGlmICghY29udGFpbmVyKSByZXR1cm5cblxuICBjb25zdCB3aXNobGlzdENvbnRleHQ6IFdpc2hsaXN0U2V0dGluZ3MgPSB7XG4gICAgd2lzaGxpc3Q6IExvY2FsU3RvcmFnZS53aXNobGlzdCxcbiAgfVxuICBjb250YWluZXIuaW5uZXJIVE1MID0gd2lzaGxpc3RUZW1wbGF0ZS5yZW5kZXIoe1xuICAgIC4uLndpc2hsaXN0Q29udGV4dCxcbiAgICB0cmFuc2xhdGUsXG4gIH0pXG5cbiAgLy8gQnV0dG9uc1xuICBmb3IgKGNvbnN0IHRyIG9mIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKFwidHJcIikpIHtcbiAgICBjb25zdCB3ZWFyYWJsZWl0ZW1pZCA9IHRyLmRhdGFzZXQud2VhcmFibGVpdGVtaWRcbiAgICBpZiAoIXdlYXJhYmxlaXRlbWlkKSBjb250aW51ZVxuXG4gICAgLy8gUmVzZXQgc3RhdHVzXG4gICAgY29uc3QgcmVzZXQgPSB0ci5xdWVyeVNlbGVjdG9yKFwiLnJlc2V0LWl0ZW0tc3RhdHVzXCIpXG4gICAgaWYgKHJlc2V0KVxuICAgICAgcmVzZXQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgcmVzZXRTdGF0dXMod2VhcmFibGVpdGVtaWQpXG4gICAgICAgIGluc2VydFdpc2hsaXN0KGJ1dHRvbilcbiAgICAgIH0pXG5cbiAgICAvLyBEZWxldGUgaXRlbSBmcm9tIHdpc2hsaXN0XG4gICAgY29uc3QgZGVsZXRlQnV0dG9uID0gdHIucXVlcnlTZWxlY3RvcihcIi5kZWxldGUtd2lzaGxpc3QtaXRlbVwiKVxuICAgIGlmIChkZWxldGVCdXR0b24pXG4gICAgICBkZWxldGVCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgZGVsZXRlSXRlbSh3ZWFyYWJsZWl0ZW1pZClcbiAgICAgICAgaW5zZXJ0V2lzaGxpc3QoYnV0dG9uKVxuICAgICAgfSlcblxuICAgIC8vIENoYW5nZSBwcmljZVxuICAgIGNvbnN0IGVkaXRQcmljZSA9IHRyLnF1ZXJ5U2VsZWN0b3IoXCIuZWRpdC1wcmljZVwiKVxuICAgIGlmIChlZGl0UHJpY2UpXG4gICAgICBlZGl0UHJpY2UuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsICgpID0+IHtcbiAgICAgICAgdm9pZCBjaGFuZ2VQcmljZSh3ZWFyYWJsZWl0ZW1pZCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgaW5zZXJ0V2lzaGxpc3QoYnV0dG9uKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiByZXNldFN0YXR1cyh3ZWFyYWJsZWl0ZW1pZDogc3RyaW5nKTogdm9pZCB7XG4gIGNvbnN0IHdpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0XG4gIGNvbnN0IGluZGV4ID0gd2lzaGxpc3QuZmluZEluZGV4KFxuICAgIGl0ZW0gPT4gaXRlbS53ZWFyYWJsZWl0ZW1pZCA9PT0gd2VhcmFibGVpdGVtaWRcbiAgKVxuICBjb25zdCBlbnRyeSA9IHdpc2hsaXN0W2luZGV4XVxuICBpZiAoIWVudHJ5KSByZXR1cm5cblxuICBkZWxldGUgZW50cnkuZXJyb3JcbiAgTG9jYWxTdG9yYWdlLndpc2hsaXN0ID0gW1xuICAgIC4uLndpc2hsaXN0LnNsaWNlKHVuZGVmaW5lZCwgaW5kZXgpLFxuICAgIGVudHJ5LFxuICAgIC4uLndpc2hsaXN0LnNsaWNlKGluZGV4ICsgMSwgdW5kZWZpbmVkKSxcbiAgXVxufVxuXG5mdW5jdGlvbiBkZWxldGVJdGVtKHdlYXJhYmxlaXRlbWlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgTG9jYWxTdG9yYWdlLndpc2hsaXN0ID0gTG9jYWxTdG9yYWdlLndpc2hsaXN0LmZpbHRlcihcbiAgICBpdGVtID0+IGl0ZW0ud2VhcmFibGVpdGVtaWQgIT09IHdlYXJhYmxlaXRlbWlkXG4gIClcbn1cblxuYXN5bmMgZnVuY3Rpb24gY2hhbmdlUHJpY2Uod2VhcmFibGVpdGVtaWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB0ZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvY2hhbmdlX3ByaWNlX2ZsYXZyLmh0bWxcIilcblxuICBjb25zdCB3aXNobGlzdCA9IExvY2FsU3RvcmFnZS53aXNobGlzdFxuICBjb25zdCBpbmRleCA9IHdpc2hsaXN0LmZpbmRJbmRleChcbiAgICBpdGVtID0+IGl0ZW0ud2VhcmFibGVpdGVtaWQgPT09IHdlYXJhYmxlaXRlbWlkXG4gIClcbiAgY29uc3QgZW50cnkgPSB3aXNobGlzdFtpbmRleF1cbiAgaWYgKCFlbnRyeSkgcmV0dXJuXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICQuZmxhdnIoe1xuICAgICAgY29udGVudDogdGVtcGxhdGUucmVuZGVyKHsgdHJhbnNsYXRlIH0pLFxuICAgICAgZGlhbG9nOiBcInByb21wdFwiLFxuICAgICAgcHJvbXB0OiB7XG4gICAgICAgIHZhbHVlOiBlbnRyeS5wcmljZS50b1N0cmluZygpLFxuICAgICAgfSxcbiAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgY2xvc2U6IHtcbiAgICAgICAgICBzdHlsZTogXCJjbG9zZVwiLFxuICAgICAgICAgIGFjdGlvbjogKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSgpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHNhdmU6IHtcbiAgICAgICAgICBhY3Rpb246ICgpID0+IHNhdmUod2VhcmFibGVpdGVtaWQsIHJlc29sdmUpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIG9uQnVpbGQ6ICRjb250YWluZXIgPT4ge1xuICAgICAgICAkY29udGFpbmVyLmFkZENsYXNzKFwibmV3LWxheW91dC1wb3B1cFwiKVxuXG4gICAgICAgIGRvY3VtZW50XG4gICAgICAgICAgLnF1ZXJ5U2VsZWN0b3I8SFRNTElucHV0RWxlbWVudD4oXCIuZmxhdnItcHJvbXB0XCIpXG4gICAgICAgICAgPy5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgKHsga2V5IH0pID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgIT09IFwiRW50ZXJcIikgcmV0dXJuXG4gICAgICAgICAgICBzYXZlKHdlYXJhYmxlaXRlbWlkLCByZXNvbHZlKVxuICAgICAgICAgIH0pXG4gICAgICB9LFxuICAgIH0pXG4gIH0pXG59XG5cbmZ1bmN0aW9uIHNhdmUod2VhcmFibGVpdGVtaWQ6IHN0cmluZywgcmVzb2x2ZTogKCkgPT4gdm9pZCk6IGJvb2xlYW4ge1xuICBjb25zdCB3aXNobGlzdCA9IExvY2FsU3RvcmFnZS53aXNobGlzdFxuICBjb25zdCBpbmRleCA9IHdpc2hsaXN0LmZpbmRJbmRleChcbiAgICBpdGVtID0+IGl0ZW0ud2VhcmFibGVpdGVtaWQgPT09IHdlYXJhYmxlaXRlbWlkXG4gIClcbiAgY29uc3QgZW50cnkgPSB3aXNobGlzdFtpbmRleF1cbiAgaWYgKCFlbnRyeSkgcmV0dXJuIGZhbHNlXG5cbiAgY29uc3QgcHJpY2UgPSBOdW1iZXIoXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PihcIi5mbGF2ci1wcm9tcHRcIik/LnZhbHVlLnRyaW0oKVxuICApXG4gIGlmICghcHJpY2UgfHwgcHJpY2UgPD0gMCkge1xuICAgICQuZmxhdnJOb3RpZih0cmFuc2xhdGUubWFya2V0LmNoYW5nZV9wcmljZS5pbnZhbGlkX3ByaWNlKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZW50cnkucHJpY2UgPSBwcmljZVxuICBMb2NhbFN0b3JhZ2Uud2lzaGxpc3QgPSBbXG4gICAgLi4ud2lzaGxpc3Quc2xpY2UodW5kZWZpbmVkLCBpbmRleCksXG4gICAgZW50cnksXG4gICAgLi4ud2lzaGxpc3Quc2xpY2UoaW5kZXggKyAxLCB1bmRlZmluZWQpLFxuICBdXG5cbiAgY29uc3QgdGVtcGxhdGU6IFRlbXBsYXRlID0gcmVxdWlyZShcIi4uL3RlbXBsYXRlcy9odG1sL2ZsYXZyX25vdGlmL2ljb25fbWVzc2FnZS5odG1sXCIpXG4gICQuZmxhdnJOb3RpZihcbiAgICB0ZW1wbGF0ZS5yZW5kZXIoe1xuICAgICAgLi4uZW50cnksXG4gICAgICBtZXNzYWdlOiB0cmFuc2xhdGUubWFya2V0LmNoYW5nZV9wcmljZS5jaGFuZ2VkX3ByaWNlKFxuICAgICAgICBlbnRyeS5uYW1lLFxuICAgICAgICBlbnRyeS5wcmljZVxuICAgICAgKSxcbiAgICB9KVxuICApXG5cbiAgcmVzb2x2ZSgpXG4gIHJldHVybiB0cnVlXG59XG4iLCJpbXBvcnQgeyBsb2FkRHJlc3NpbmdFeHBlcmllbmNlIH0gZnJvbSBcIi4vYXBwZWFyYW5jZS9kcmVzc2luZ19leHBlcmllbmNlXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuL2kxOG4vdHJhbnNsYXRlXCJcbmltcG9ydCB7IG1pZ3JhdGUgfSBmcm9tIFwiLi9taWdyYXRlXCJcbmltcG9ydCB7IGxvYWRUYWtlb3ZlciB9IGZyb20gXCIuL3Rha2VvdmVyL2JyYWluXCJcbmltcG9ydCB7IGxvYWRBdWN0aW9ucyB9IGZyb20gXCIuL3VpL2F1Y3Rpb25zXCJcbmltcG9ydCB7IGxvYWRDYXJvdXNlbCB9IGZyb20gXCIuL3VpL2Nhcm91c2VsXCJcbmltcG9ydCB7IGxvYWRGYXZvdXJpdGVzIH0gZnJvbSBcIi4vdWkvZmF2b3VyaXRlc1wiXG5pbXBvcnQgeyBsb2FkSG9tZUNvbnRlbnQgfSBmcm9tIFwiLi91aS9ob21lX2NvbnRlbnRcIlxuaW1wb3J0IHsgbG9hZE1hcmtldCB9IGZyb20gXCIuL3VpL21hcmtldFwiXG5pbXBvcnQgeyBsb2FkTWVudSB9IGZyb20gXCIuL3VpL21lbnVcIlxuaW1wb3J0IHsgbG9hZFBldCB9IGZyb20gXCIuL3VpL3BldFwiXG5pbXBvcnQgeyBsb2FkUHJvZmlsZSB9IGZyb20gXCIuL3VpL3Byb2ZpbGVcIlxuaW1wb3J0IHsgbG9hZFNlbGwgfSBmcm9tIFwiLi91aS9zZWxsXCJcbmltcG9ydCB7IGxvYWRTZXR0aW5ncyB9IGZyb20gXCIuL3VpL3NldHRpbmdzXCJcbmltcG9ydCB7IGxvYWRUb3BCYXIgfSBmcm9tIFwiLi91aS90b3BfYmFyXCJcbmltcG9ydCB7IGxvYWRXaXNobGlzdCB9IGZyb20gXCIuL3VpL3dpc2hsaXN0XCJcblxuLy8gbG9hZEpTKFwiaHR0cHM6Ly91bnBrZy5jb20vaG9nYW4uanMvZGlzdC90ZW1wbGF0ZS0zLjAuMi5taW4uanNcIiwgdHJ1ZSk7XG5cbmZ1bmN0aW9uIGxvYWQoKTogdm9pZCB7XG4gIGxvYWRVSSgpXG4gIGxvYWRUYWtlb3ZlcigpXG59XG5cbmZ1bmN0aW9uIGxvYWRVSSgpOiB2b2lkIHtcbiAgbG9hZE1lbnUoKVxuICBsb2FkQ2Fyb3VzZWwoKVxuICBsb2FkSG9tZUNvbnRlbnQoKVxuICBsb2FkRmF2b3VyaXRlcygpXG4gIGxvYWRQcm9maWxlKClcbiAgbG9hZFBldCgpXG4gIGxvYWRNYXJrZXQoKVxuICBsb2FkV2lzaGxpc3QoKVxuICBsb2FkVG9wQmFyKClcbiAgbG9hZEF1Y3Rpb25zKClcbiAgbG9hZFNlbGwoKVxuICBsb2FkRHJlc3NpbmdFeHBlcmllbmNlKClcblxuICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiKSB2b2lkIGxvYWRJbmRleGVkRGIoKVxuICBlbHNlIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLCAoKSA9PiBsb2FkSW5kZXhlZERiKCkpXG59XG5cbmZ1bmN0aW9uIGxvYWRJbmRleGVkRGIoKTogdm9pZCB7XG4gIHZvaWQgbG9hZFNldHRpbmdzKClcbn1cblxubmV3IE11dGF0aW9uT2JzZXJ2ZXIobG9hZCkub2JzZXJ2ZSg8Tm9kZT5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvbnRhaW5lclwiKSwge1xuICBjaGlsZExpc3Q6IHRydWUsXG59KVxuXG5taWdyYXRlKClcblxubG9hZFVJKClcbmNvbnNvbGUubG9nKHRyYW5zbGF0ZS5ob21lLnNjcmlwdF9sb2FkZWQpXG5sb2FkVGFrZW92ZXIoKVxuIiwiaW1wb3J0IHR5cGUgeyBUZW1wbGF0ZSB9IGZyb20gXCJob2dhbi5qc1wiXG5pbXBvcnQgeyB0cmFuc2xhdGUgfSBmcm9tIFwiLi4vaTE4bi90cmFuc2xhdGVcIlxuaW1wb3J0IHR5cGUgeyBNYWluTWVudSB9IGZyb20gXCIuLi90ZW1wbGF0ZXMvaW50ZXJmYWNlcy9tYWluX21lbnVcIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZE1lbnUoKTogdm9pZCB7XG4gIGNvbnN0IG1lbnVJbm5lclJpZ2h0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtZW51LWlubmVyLXJpZ2h0XCIpXG4gIGlmICghbWVudUlubmVyUmlnaHQgfHwgbWVudUlubmVyUmlnaHQucXVlcnlTZWxlY3RvcihcIi5tYWluLW1lbnUtZWVcIikpIHJldHVyblxuXG4gIC8vIFJlbW92ZSBiYW5rXG4gIG1lbnVJbm5lclJpZ2h0LnF1ZXJ5U2VsZWN0b3IoXCIubWFpbi1tZW51LWJhbmtcIik/LnJlbW92ZSgpXG5cbiAgLy8gQWRkIEZvcnVtXG4gIGNvbnN0IG1lbnVUZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvbWFpbl9tZW51Lmh0bWxcIilcbiAgY29uc3QgbWFpbk1lbnVGb3J1bTogTWFpbk1lbnUgPSB7XG4gICAgY2xhc3M6IFwiZm9ydW1cIixcbiAgICBocmVmOiBcIi9mb3J1bVwiLFxuICAgIHRleHQ6IHRyYW5zbGF0ZS5ob21lLmZvcnVtLFxuICB9XG5cbiAgbWVudUlubmVyUmlnaHQuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgbWVudVRlbXBsYXRlLnJlbmRlcihtYWluTWVudUZvcnVtKVxuICApXG59XG4iLCJpbXBvcnQgdHlwZSB7IFRlbXBsYXRlIH0gZnJvbSBcImhvZ2FuLmpzXCJcbmltcG9ydCB7IHRyYW5zbGF0ZSB9IGZyb20gXCIuLi9pMThuL3RyYW5zbGF0ZVwiXG5pbXBvcnQgdHlwZSB7IEhvbWVDb250ZW50U21hbGwgfSBmcm9tIFwiLi4vdGVtcGxhdGVzL2ludGVyZmFjZXMvaG9tZV9jb250ZW50X3NtYWxsXCJcblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRIb21lQ29udGVudCgpOiB2b2lkIHtcbiAgY29uc3QgaG9tZUNvbnRlbnRTbWFsbHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImhvbWUtY29udGVudC1zbWFsbHNcIilcbiAgaWYgKFxuICAgICFob21lQ29udGVudFNtYWxscyB8fFxuICAgIGhvbWVDb250ZW50U21hbGxzLnF1ZXJ5U2VsZWN0b3IoXCIuaG9tZS1jb250ZW50LXNtYWxsLWVlXCIpXG4gIClcbiAgICByZXR1cm5cblxuICAvLyBSZW1vdmUgYmFua1xuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImhvbWUtYmFua1wiKT8ucmVtb3ZlKClcblxuICAvLyBBZGQgZm9ydW1cbiAgY29uc3Qgc21hbGxUZW1wbGF0ZTogVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vdGVtcGxhdGVzL2h0bWwvaG9tZV9jb250ZW50X3NtYWxsLmh0bWxcIilcbiAgY29uc3Qgc21hbGxDb250ZW50OiBIb21lQ29udGVudFNtYWxsID0ge1xuICAgIGJhY2tncm91bmRJbWFnZTpcbiAgICAgIFwiL2Fzc2V0cy9pbWcvbWluaWdhbWVzL3RyZWFzdXJlaHVudC9hNDhiYmM0ZTQ4NDk3NDVlYmU2ZGJjZjUzMTNlYjNmMC5qcGdcIixcbiAgICBoNDogdHJhbnNsYXRlLmhvbWUuZm9ydW0sXG4gICAgaHJlZjogXCIvZm9ydW1cIixcbiAgICBpZDogXCJmb3J1bVwiLFxuICB9XG5cbiAgaG9tZUNvbnRlbnRTbWFsbHMuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuICAgIFwiYmVmb3JlZW5kXCIsXG4gICAgc21hbGxUZW1wbGF0ZS5yZW5kZXIoc21hbGxDb250ZW50KVxuICApXG59XG4iLCJpbXBvcnQgd2FyZHJvYmUgZnJvbSBcIi4vd2FyZHJvYmVcIlxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFwcGVhcmFuY2VVSSgpOiB2b2lkIHtcbiAgc2V0dXBCYWNrZ3JvdW5kKClcbiAgc2V0dXBMZWZ0UGFuZWwoKVxuICBzZXR1cFJpZ2h0UGFuZWwoKVxuXG4gIGlmICh3YXJkcm9iZS5hdmFpbGFibGVJdGVtcykgYXZhaWxhYmxlSXRlbXMgPSB3YXJkcm9iZS5hdmFpbGFibGVJdGVtc1xuICBlbHNlIHdhcmRyb2JlLmF2YWlsYWJsZUl0ZW1zID0gYXZhaWxhYmxlSXRlbXNcbn1cblxuZnVuY3Rpb24gc2V0dXBCYWNrZ3JvdW5kKCk6IHZvaWQge1xuICBjb25zdCBiYWNrZ3JvdW5kID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MSW1hZ2VFbGVtZW50PihcbiAgICBcIiNhdmF0YXItYmFja2dyb3VuZCBpbWdcIlxuICApXG4gIGlmIChiYWNrZ3JvdW5kKSB7XG4gICAgYmFja2dyb3VuZC5zdHlsZS5maWx0ZXIgPSBcInVuc2V0XCJcbiAgICBiYWNrZ3JvdW5kLnN0eWxlLmhlaWdodCA9IFwidW5zZXRcIlxuICAgIGJhY2tncm91bmQuc3R5bGUubWFzayA9XG4gICAgICBcImxpbmVhci1ncmFkaWVudCh0byByaWdodCwgYmxhY2sgNTAlLCB0cmFuc3BhcmVudCAxMDAlKVwiXG4gICAgYmFja2dyb3VuZC5zdHlsZS5taW5IZWlnaHQgPSBcIjEwMHZoXCJcbiAgICBiYWNrZ3JvdW5kLnN0eWxlLm1pbldpZHRoID0gXCI1MHZ3XCJcbiAgICBiYWNrZ3JvdW5kLnN0eWxlLnBvc2l0aW9uID0gXCJmaXhlZFwiXG4gICAgYmFja2dyb3VuZC5zdHlsZS50cmFuc2Zvcm0gPSBcInVuc2V0XCJcbiAgICBiYWNrZ3JvdW5kLnN0eWxlLndpZHRoID0gXCJ1bnNldFwiXG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0dXBSaWdodFBhbmVsKCk6IHZvaWQge1xuICBjb25zdCByaWdodFBhbmVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhcHBlYXJhbmNlLXJpZ2h0XCIpXG4gIGlmIChyaWdodFBhbmVsKSByaWdodFBhbmVsLnN0eWxlLnBhZGRpbmdUb3AgPSBcIjgwcHhcIlxufVxuXG5mdW5jdGlvbiBzZXR1cExlZnRQYW5lbCgpOiB2b2lkIHtcbiAgY29uc3QgcHJldmlld091dGVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhcHBlYXJhbmNlLXByZXZpZXctb3V0ZXJcIilcbiAgaWYgKHByZXZpZXdPdXRlcikge1xuICAgIHByZXZpZXdPdXRlci5zdHlsZS5wYWRkaW5nID0gXCIwcHhcIlxuICB9XG5cbiAgY29uc3QgcHJldmlldyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYXBwZWFyYW5jZS1wcmV2aWV3XCIpXG4gIGlmIChwcmV2aWV3KSB7XG4gICAgcHJldmlldy5zdHlsZS5sZWZ0ID0gXCIwXCJcbiAgICBwcmV2aWV3LnN0eWxlLnBvc2l0aW9uID0gXCJmaXhlZFwiXG4gICAgcHJldmlldy5zdHlsZS50b3AgPSBcImNhbGMoNTAlIC0gdmFyKC0tdG9wYmFyLWhlaWdodCkpXCJcbiAgICBwcmV2aWV3LnN0eWxlLnRyYW5zZm9ybSA9IFwidHJhbnNsYXRlWSgtNTAlKVwiXG4gIH1cblxuICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxDYW52YXNFbGVtZW50PihcbiAgICBcIiNhcHBlYXJhbmNlLXByZXZpZXcgY2FudmFzXCJcbiAgKVxuICBpZiAoY2FudmFzKSB7XG4gICAgY2FudmFzLnN0eWxlLm1heEhlaWdodCA9IFwiMTAwdmhcIlxuICAgIGNhbnZhcy5zdHlsZS5tYXhXaWR0aCA9IFwiNTB2d1wiXG4gIH1cbn1cbiIsImltcG9ydCB7IExvY2FsU3RvcmFnZSB9IGZyb20gXCIuL2xvY2FsX3N0b3JhZ2UvbG9jYWxfc3RvcmFnZVwiXG5cbmV4cG9ydCBmdW5jdGlvbiBtaWdyYXRlKCk6IHZvaWQge1xuICBpZiAoTG9jYWxTdG9yYWdlLnZlcnNpb24gPT09IEdNLmluZm8uc2NyaXB0LnZlcnNpb24pIHJldHVyblxuXG4gIGlmIChHTS5pbmZvLnNjcmlwdC52ZXJzaW9uID09PSBcIjEuMi4wXCIpIHtcbiAgICBMb2NhbFN0b3JhZ2Uuc2FsZXMgPSBbXVxuICAgICQuZmxhdnJOb3RpZihcIk1pZ3JhdGVkIHRvIHYxLjIuMC4gWW91ciBzYWxlcyBoaXN0b3J5IHdhcyBlcmFzZWQuXCIpXG4gIH0gZWxzZSB7XG4gICAgaW5zdGFsbGVkKClcbiAgfVxuXG4gIExvY2FsU3RvcmFnZS52ZXJzaW9uID0gR00uaW5mby5zY3JpcHQudmVyc2lvblxufVxuXG5mdW5jdGlvbiBpbnN0YWxsZWQoKTogdm9pZCB7XG4gICQuZmxhdnJOb3RpZihcbiAgICBgPHN0cm9uZz4ke0dNLmluZm8uc2NyaXB0Lm5hbWV9PC9zdHJvbmc+IHY8c3Ryb25nPiR7R00uaW5mby5zY3JpcHQudmVyc2lvbn08L3N0cm9uZz4gaW5zdGFsbGVkIWBcbiAgKVxufVxuIl0sIm5hbWVzIjpbIkhvZ2FuIiwicklzV2hpdGVzcGFjZSIsInJRdW90Iiwick5ld2xpbmUiLCJyQ3IiLCJyU2xhc2giLCJyTGluZVNlcCIsInJQYXJhZ3JhcGhTZXAiLCJ0cmltIiwicyIsInJlcGxhY2UiLCJ0YWdDaGFuZ2UiLCJ0YWciLCJ0ZXh0IiwiaW5kZXgiLCJjaGFyQXQiLCJpIiwibCIsImxlbmd0aCIsInRhZ3MiLCJzY2FuIiwiZGVsaW1pdGVycyIsInRva2VuIiwibGVuIiwic3RhdGUiLCJ0YWdUeXBlIiwiYnVmIiwidG9rZW5zIiwic2VlblRhZyIsImxpbmVTdGFydCIsIm90YWciLCJjdGFnIiwiYWRkQnVmIiwicHVzaCIsIlN0cmluZyIsImZpbHRlckxpbmUiLCJoYXZlU2VlblRhZyIsIm5vTmV3TGluZSIsImlzQWxsV2hpdGVzcGFjZSIsImoiLCJtYXRjaCIsImxpbmVJc1doaXRlc3BhY2UiLCJuZXh0IiwiaW5kZW50IiwidG9TdHJpbmciLCJzcGxpY2UiLCJjaGFuZ2VEZWxpbWl0ZXJzIiwiY2xvc2UiLCJjbG9zZUluZGV4IiwiaW5kZXhPZiIsInN1YnN0cmluZyIsInNwbGl0IiwibiIsInN1YnN0ciIsImFsbG93ZWRJblN1cGVyIiwiYnVpbGRUcmVlIiwia2luZCIsInN0YWNrIiwiY3VzdG9tVGFncyIsInRhaWwiLCJpbnN0cnVjdGlvbnMiLCJvcGVuZXIiLCJzaGlmdCIsIkVycm9yIiwiaXNPcGVuZXIiLCJub2RlcyIsInBvcCIsImlzQ2xvc2VyIiwiZW5kIiwibGFzdCIsIm8iLCJvcGVuIiwiYyIsInN0cmluZ2lmeVBhcnRpYWxzIiwiY29kZU9iaiIsInBhcnRpYWxzIiwia2V5IiwiZXNjIiwibmFtZSIsImpvaW4iLCJvYmoiLCJpdGVtcyIsInN0cmluZ2lmeVN1YnN0aXR1dGlvbnMiLCJzdWJzIiwic3RyaW5naWZ5Iiwib3B0aW9ucyIsIndyYXBNYWluIiwiY29kZSIsInNlcmlhbE5vIiwiY2hvb3NlTWV0aG9kIiwiY3JlYXRlUGFydGlhbCIsIm5vZGUiLCJjb250ZXh0Iiwic3ltIiwicHJlZml4IiwidHJpcGxlU3RhY2hlIiwid3JpdGUiLCJnZW5lcmF0ZSIsInRyZWUiLCJ3YWxrIiwiYXNTdHJpbmciLCJ0aGlzIiwibWFrZVRlbXBsYXRlIiwidGVtcGxhdGUiLCJUZW1wbGF0ZSIsIm1ha2VQYXJ0aWFscyIsIkZ1bmN0aW9uIiwiY29kZWdlbiIsImN0eCIsImluUGFydGlhbCIsIm5vZGVsaXN0IiwiZnVuYyIsInBhcnNlIiwic2VjdGlvblRhZ3MiLCJjYWNoZSIsImNhY2hlS2V5IiwiZGlzYWJsZUxhbWJkYSIsIm1vZGVsR2V0IiwiY29tcGlsZSIsImluc3RhbmNlIiwiZXhwb3J0cyIsIm1vZHVsZSIsImZpbmRJblNjb3BlIiwic2NvcGUiLCJkb01vZGVsR2V0IiwidmFsIiwidW5kZWZpbmVkIiwiZ2V0IiwiY29tcGlsZXIiLCJyIiwicHJvdG90eXBlIiwidiIsInN0ciIsImNvZXJjZVRvU3RyaW5nIiwiaENoYXJzIiwidGVzdCIsInJBbXAiLCJyTHQiLCJyR3QiLCJyQXBvcyIsInQiLCJyZW5kZXIiLCJyaSIsImVwIiwic3ltYm9sIiwicGFydGlhbCIsImJhc2UiLCJzdGFja1RleHQiLCJhY3RpdmVTdWIiLCJzdGFja1N1YnMiLCJzdGFja1BhcnRpYWxzIiwiUGFydGlhbFRlbXBsYXRlIiwiU3Vic3RpdHV0aW9ucyIsInN1YnNUZXh0IiwiY3JlYXRlU3BlY2lhbGl6ZWRQYXJ0aWFsIiwicnAiLCJycyIsInNlY3Rpb24iLCJpc0FycmF5IiwiaW52ZXJ0ZWQiLCJzdGFydCIsInBhc3MiLCJtcyIsImQiLCJyZXR1cm5Gb3VuZCIsImZvdW5kIiwibmFtZXMiLCJmIiwiY3giLCJtdiIsImxzIiwib2xkVGFncyIsImIiLCJjdCIsImNhbGwiLCJmbCIsInRleHRTb3VyY2UiLCJyZXN1bHQiLCJzdWIiLCJBcnJheSIsImEiLCJPYmplY3QiLCJIIiwicCIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJlbiIsImhvbWUiLCJmb3J1bSIsInNjcmlwdF9sb2FkZWQiLCJHTSIsImluZm8iLCJzY3JpcHQiLCJ2ZXJzaW9uIiwidGFrZW92ZXIiLCJib3VnaHQiLCJwcmljZSIsImRpc2FibGVkIiwiZW5hYmxlZCIsImNhcm91c2VsIiwiYmVlbW9vdl9hbm5veWFuY2VzIiwidGl0bGUiLCJzdWJ0aXRsZSIsImRvd25sb2FkX2ZhY2UiLCJkb3dubG9hZF9ndWFyZGlhbiIsImVsZGFyeWFfZW5oYW5jZW1lbnRzIiwiZGVzY3JpcHRpb24iLCJkaXNhYmxlX3Rha2VvdmVyIiwiZW5hYmxlX3Rha2VvdmVyIiwibWluaWdhbWVzIiwicGxheWluZyIsInBsYXllZF9mb3IiLCJtYWFuYXMiLCJhcHBlYXJhbmNlIiwiYnV0dG9ucyIsImJhY2t3YXJkIiwiZm9yd2FyZCIsImZhdm91cml0ZXMiLCJpbXBvcnRlZCIsImltcG9ydGluZyIsImNsaWNrX291dGZpdCIsImRlbGV0ZSIsImdvdG9fYWNjb3VudCIsInNhdmVkX2xvY2FsbHkiLCJ3ZWFyIiwic2F2ZV9vdXRmaXQiLCJwbGFjZWhvbGRlciIsInNhdmUiLCJkb3dubG9hZCIsImV4cG9ydCIsImltcG9ydCIsIm1hcmtldCIsImFkZF90b193aXNobGlzdCIsImFkZGVkX3RvX3dpc2hsaXN0IiwiaW52YWxpZF9wcmljZSIsImF1Y3Rpb25zIiwiYnV5X25vd19wcmljZSIsImN1cnJlbnRfcHJpY2UiLCJwdXJjaGFzZV9oaXN0b3J5Iiwic2FsZXNfaGlzdG9yeSIsImRhdGVfdGltZV9mb3JtYXQiLCJJbnRsIiwiRGF0ZVRpbWVGb3JtYXQiLCJtaW51dGUiLCJob3VyIiwiZGF5IiwibW9udGgiLCJ5ZWFyIiwiY2hhbmdlX3ByaWNlIiwiY2hhbmdlZF9wcmljZSIsIndpc2hsaXN0IiwiYXNzaXN0YW5jZSIsImFjdGlvbnMiLCJkZWxldGVfdG9vbHRpcCIsImljb24iLCJyZXNldF90b29sdGlwIiwicmVzZXQiLCJzdGF0dXMiLCJhY2NvdW50IiwiZGVidWdfdG9vbHRpcCIsImRlYnVnIiwiZW5oYW5jZW1lbnRzIiwiZXhwbG9yYXRpb25zIiwicGV0IiwiYXV0b19leHBsb3JlIiwicHJvZmlsZSIsImV4cG9ydF9vdXRmaXQiLCJkb3dubG9hZF9vdXRmaXQiLCJmcmVlemUiLCJmciIsInRyYW5zbGF0ZSIsImxvY2F0aW9uIiwiaG9zdG5hbWUiLCJlbmRzV2l0aCIsIkRhdGFiYXNlcyIsIkZpZWxkcyIsIlRhYmxlcyIsImRiIiwiY29uc3RydWN0b3IiLCJyZXF1ZXN0IiwiaW5kZXhlZERCIiwib25zdWNjZXNzIiwib251cGdyYWRlbmVlZGVkIiwib2JqZWN0U3RvcmUiLCJjcmVhdGVPYmplY3RTdG9yZSIsImZhdm91cml0ZV9vdXRmaXRzIiwia2V5UGF0aCIsImF1dG9JbmNyZW1lbnQiLCJjcmVhdGVJbmRleCIsImJsb2IiLCJ1bmlxdWUiLCJmYXZvdXJpdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInRyYW5zYWN0aW9uIiwiYWRkIiwidXJsIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiaWQiLCJOdW1iZXIiLCJjbGVhciIsInJldm9rZU9iamVjdFVSTCIsImdldEFsbCIsIm1hcCIsImV4cG9ydE91dGZpdCIsInNlbGVjdG9yIiwiYXZhdGFyIiwiU2FjaGEiLCJBdmF0YXIiLCJhdmF0YXJzIiwib3V0Zml0IiwicGFyc2VBdmF0YXIiLCJocmVmIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsImNsaWNrIiwiY2hpbGRyZW4iLCJjaGlsZCIsIml0ZW0iLCJnZXRJdGVtIiwiX2lkIiwiZ3JvdXAiLCJfZ3JvdXAiLCJfbmFtZSIsImltYWdlIiwiX2ltYWdlIiwidHlwZSIsIl90eXBlIiwiY2F0ZWdvcnlJZCIsIl9jYXRlZ29yeUlkIiwiaGlkZGVuQ2F0ZWdvcmllcyIsInZhbHVlcyIsIl9oaWRkZW5DYXRlZ29yaWVzIiwiYW5pbWF0aW9uRGF0YSIsIl9hbmltYXRpb25EYXRhIiwibG9ja2VkIiwiX2xvY2tlZCIsImV4cG9ydFByZXZpZXciLCJpbXBvcnRPdXRmaXQiLCJpbnB1dCIsImFkZEV2ZW50TGlzdGVuZXIiLCJldmVudCIsInRhcmdldCIsImZpbGVzIiwiZmlsZSIsInRoZW4iLCJhc3luYyIsInZhbHVlIiwid2Vhck91dGZpdCIsIiQiLCJmbGF2ck5vdGlmIiwiY2F0ZWdvcmllcyIsIlNldCIsImNsb3RoaW5nIiwiYXZhaWxhYmxlSXRlbXMiLCJhbGwiLCJmcm9tIiwiY2F0ZWdvcnkiLCJxdWVyeVNlbGVjdG9yIiwicG9zdCIsInZpZXciLCJoaWRlIiwiYXBwZW5kVG8iLCJhbHdheXMiLCJvcGVuQ2F0ZWdvcnkiLCJncm91cHMiLCJvcGVuR3JvdXAiLCJ3b3JuSXRlbXMiLCJpdGVtUmVuZGVyIiwicmVtb3ZlSXRlbUZyb21BbGxBdmF0YXJzIiwicmVtb3ZlQ2xhc3MiLCJyZW1vdmVDbG90aGVzIiwiYWRkSXRlbXMiLCJpbml0aWFsaXplU2VsZWN0ZWRJdGVtcyIsImluaXRpYWxpemVIaWRkZW5DYXRlZ29yaWVzIiwiYXZhdGFyQWN0aW9ucyIsImdldEVsZW1lbnRCeUlkIiwic3R5bGUiLCJkaXNwbGF5Iiwic2hvd0Zhdm91cml0ZSIsImZsYXZyIiwiY29udGVudCIsIm9uQnVpbGQiLCIkY29udGFpbmVyIiwiYWRkQ2xhc3MiLCJhY3Rpb24iLCJpbmRleGVkX2RiIiwiZGVsZXRlRmF2b3VyaXRlT3V0Zml0IiwibG9hZEZha2VGYXZvdXJpdGVzIiwiZGVsZXRlRmF2b3VyaXRlIiwiZG93bmxvYWRDYW52YXMiLCJjYW52YXMiLCJ0b0Jsb2IiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJyZW1vdmVDaGlsZCIsImRvd25sb2FkRmFjZSIsImNvbnNvbGUiLCJ3YXJuIiwiZG93bmxvYWRHdWFyZGlhbiIsImdldE5hbWUiLCJkb3dubG9hZEFwcGVhcmFuY2UiLCJkb3dubG9hZFByb2ZpbGUiLCJ0ZXh0Q29udGVudCIsImxvYWRGYXZvdXJpdGVzIiwiYWN0aW9uVGVtcGxhdGUiLCJpbXBvcnRBY3Rpb24iLCJleHBvcnRBY3Rpb24iLCJkb3dubG9hZEFjdGlvbiIsImluc2VydEFkamFjZW50SFRNTCIsImxvYWRGYXZvdXJpdGVzQWN0aW9ucyIsInRodW1icyIsImdldEZhdm91cml0ZU91dGZpdHMiLCJyZW1vdmUiLCJvdXRmaXRzIiwic2F2ZUJ1dHRvbiIsImNsYXNzTGlzdCIsImFkZEZhdm91cml0ZU91dGZpdCIsInNhdmVBY3Rpb24iLCJzaG93T3V0Zml0Iiwic2F2ZUZhdm91cml0ZSIsImRpdiIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJmaW5kIiwiZGF0YXNldCIsImFycmF5SW5kZXgiLCJnZXRDYXRlZ29yaWVzIiwiZ2V0Q2F0ZWdvcnkiLCJnZXRDYXRlZ29yeUdyb3VwcyIsImNhdGVnb3J5aWQiLCJmaWx0ZXIiLCJnZXRHcm91cCIsImdldEdyb3VwcyIsImdldEl0ZW1zIiwic2V0Q2F0ZWdvcnkiLCJzZXRHcm91cCIsInNldEl0ZW0iLCJpdGVtaWQiLCJoYW5kbGVDYXRlZ29yeSIsImFwcGVhcmFuY2VJdGVtcyIsIm9sZENhdENvbnRhaW5lciIsImhhbmRsZUdyb3VwcyIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJfIiwib2JzZXJ2ZXIiLCJuZXdDYXRDb250YWluZXIiLCJkaXNjb25uZWN0Iiwib2JzZXJ2ZSIsImNoaWxkTGlzdCIsImNhdGVnb3J5Q29udGFpbmVyIiwic2V0VGltZW91dCIsImNhdGVnb3J5bmFtZSIsImVlSXRlbXMiLCJpdGVtVGVtcGxhdGUiLCJncm91cFRlbXBsYXRlIiwibG9hZEhpZGRlbkNhdGVnb3J5IiwibGkiLCJpbm5lckhUTUwiLCJzcmMiLCJyYXJpdHkiLCJyYXJpdHluYW1lIiwib3V0ZXJIVE1MIiwiaGlkZGVuIiwidW5sb2FkSGlkZGVuQ2F0ZWdvcmllcyIsImNyZWF0ZUJsb2IiLCJwYXJ0cyIsInByb3BlcnRpZXMiLCJCbG9iIiwiZSIsImJ1aWxkZXIiLCJCbG9iQnVpbGRlciIsIk1TQmxvYkJ1aWxkZXIiLCJNb3pCbG9iQnVpbGRlciIsIldlYktpdEJsb2JCdWlsZGVyIiwiYXBwZW5kIiwiZ2V0QmxvYiIsImJsb2JUb0Jhc2U2NFN0cmluZyIsInJlYWRlciIsIkZpbGVSZWFkZXIiLCJoYXNCaW5hcnlTdHJpbmciLCJyZWFkQXNCaW5hcnlTdHJpbmciLCJvbmxvYWRlbmQiLCJidWZmZXIiLCJiaW5hcnkiLCJieXRlcyIsIlVpbnQ4QXJyYXkiLCJieXRlTGVuZ3RoIiwiZnJvbUNoYXJDb2RlIiwiYXJyYXlCdWZmZXJUb0JpbmFyeVN0cmluZyIsIm9uZXJyb3IiLCJyZWFkQXNBcnJheUJ1ZmZlciIsImJsb2JUb0JpbmFyeVN0cmluZyIsImJ0b2EiLCJiaW5hcnlTdHJpbmdUb0FycmF5QnVmZmVyIiwiQXJyYXlCdWZmZXIiLCJhcnIiLCJjaGFyQ29kZUF0IiwiTG9jYWxTdG9yYWdlS2V5IiwiU2Vzc2lvblN0b3JhZ2VLZXkiLCJCb2R5TG9jYXRpb24iLCJDYXRlZ29yeVN0cmluZyIsIkNhdGVnb3J5TnVtYmVyIiwiR3VhcmQiLCJSYXJpdHkiLCJUeXBlIiwiVGFrZW92ZXJBY3Rpb24iLCJMb2NhbFN0b3JhZ2UiLCJsb2NhbFN0b3JhZ2UiLCJhdXRvRXhwbG9yZUxvY2F0aW9ucyIsImxvY2F0aW9ucyIsInB1cmNoYXNlcyIsImVudHJ5Iiwic2FsZXMiLCJzYWxlIiwiYmFzZTY0Iiwic2V0dGluZ3MiLCJjbGVhckZhdm91cml0ZU91dGZpdHMiLCJhdG9iIiwiZmFsbGJhY2siLCJDb25zb2xlIiwibWVzc2FnZSIsIm9wdGlvbmFsUGFyYW1zIiwiZGVidWdnaW5nIiwiZXJyb3IiLCJsb2ciLCJTZXNzaW9uU3RvcmFnZSIsInNlc3Npb25TdG9yYWdlIiwiZXhwbG9yYXRpb25zRG9uZSIsImRvbmUiLCJtZXRhIiwibWluaWdhbWVzRG9uZSIsInNlbGVjdGVkTG9jYXRpb24iLCJzZWxlY3RlZCIsImxvYWRUb3BCYXIiLCJoZWFkZXJSaWdodCIsImhlYWRlclRha2VvdmVyIiwiaGVhZGVyUHJvZmlsZSIsImZpcnN0Q2hpbGQiLCJjb2xvciIsImZvbnRGYW1pbHkiLCJmb250V2VpZ2h0IiwiaW5zZXJ0QWRqYWNlbnRFbGVtZW50IiwicmVwbGFjZVdpdGgiLCJhdmF0YXJUaXRsZSIsInBhZ2VMb2FkIiwibG9hZExpbmtzIiwidG9nZ2xlVGFrZW92ZXIiLCJnZXRJdGVtRGV0YWlscyIsImlubmVyVGV4dCIsImN1cnJlbnRQcmljZSIsImJ1eU5vd1ByaWNlIiwiZGF0ZSIsIkRhdGUiLCJpbnRlcnZhbCIsInNldEludGVydmFsIiwiZWxlbWVudCIsImNsZWFySW50ZXJ2YWwiLCJtb3VzZUV2ZW50IiwiY3JlYXRlRXZlbnQiLCJpbml0RXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiQWN0aW9uIiwiYnV5IiwibWFhbmEiLCJjb25kaXRpb24iLCJCb29sZWFuIiwicGF0aG5hbWUiLCJpY29uTWVzc2FnZSIsIndpc2hlZCIsImFtb3VudCIsImZvcnBhZ2UiLCJwYWdlIiwicmVzdWx0cyIsInNlYXJjaCIsIndhbnRlZCIsImN1cnJlbnRNYWFuYSIsInB1cmNoYXNlIiwianNvbiIsIml0ZW1JZCIsImRhdGEiLCJzZXRFcnJvciIsIndlYXJhYmxlaXRlbWlkIiwiZmlsdGVySXRlbU5hbWUiLCJtYXJrZXRwbGFjZVNlYXJjaEl0ZW1zIiwiQWxsIiwiYm9keUxvY2F0aW9uIiwiZ3VhcmQiLCJhbnkiLCJ0byIsImFqYXhTZWFyY2giLCJmaW5kSW5kZXgiLCJzbGljZSIsImRhaWx5IiwiZGFpbHlHaWZ0Q29udGFpbmVyIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInJlc2V0VGFrZW92ZXIiLCJjaGFuZ2VSZWdpb24iLCJuZXdSZWdpb25JZCIsImN1cnJlbnRSZWdpb24iLCJwZW5kaW5nVHJlYXN1cmVIdW50TG9jYXRpb24iLCJ0aW1lTGVmdEV4cGxvcmF0aW9uIiwiUmVzdWx0IiwiRHVyYXRpb25Vbml0IiwiRXhwbG9yYXRpb25TdGF0dXMiLCJnZXRFeHBsb3JhdGlvblN0YXR1cyIsImlkbGUiLCJzdGFydEV4cGxvcmF0aW9uIiwicGVuZGluZyIsIndhaXRFeHBsb3JhdGlvbiIsInBlcmZvcm0iLCJlbmRFeHBsb3JhdGlvbiIsImNhcHR1cmUiLCJlbmRDYXB0dXJlIiwiY2xpY2tSZWdpb24iLCJyZWdpb24iLCJzYXZlZCIsInJlbG9hZCIsIkF1ZGlvIiwicGxheSIsImdldEN1cnJlbnRTZWFzb24iLCJzdGFydHNXaXRoIiwiZ2V0TG93ZXN0RW5lcmd5TG9jYXRpb24iLCJyZWR1Y2UiLCJsb3dlc3QiLCJwbGFjZSIsImVuZXJneVJlcXVpcmVkIiwiZ2V0U2VsZWN0ZWRMb2NhdGlvbiIsInNlbGVjdExvY2F0aW9uIiwiYWZmb3JkYWJsZSIsInBldEVuZXJneSIsIm1pbmltdW1FbmVyZ3kiLCJub3REZWFkRW5kIiwiTWF0aCIsImZsb29yIiwicmFuZG9tIiwic2FtZUVuZXJneSIsInNlYXNvbiIsImNsaWNrU2Vhc29uIiwiZXhwbG9yaW5nIiwiY2xpY2tMb2NhdGlvbiIsImNsaWNrRXhwbG9yZSIsInNlY29uZCIsInRpbWVUb0V4cGxvcmUiLCJleHBsb3JhdGlvblJlc3VsdHMiLCJzdWNjZXNzIiwiY2FwdHVyZUVuZCIsImdsb2JhbHMiLCJjZWlsIiwiZmxhcHB5Iiwic2NvcmVNaW4iLCJzY29yZU1heCIsImRlbGF5TWluIiwiZGVsYXlNYXgiLCJidXR0b25TZWxlY3RvciIsImhhdGNobGluZ3MiLCJwZWdnbGUiLCJtaW5pZ2FtZSIsImJ1dHRvbiIsIlJlY2FwdGNoYSIsImV4ZWN1dGUiLCJzdGFydEdhbWUiLCJjYXRjaCIsImdhbWVUb2tlbiIsInNjb3JlIiwicmFuZG9tSW50IiwiZW5jX3Rva2VuIiwieG9yIiwidG1wIiwieG9yRW5jb2RlIiwiZ2V0UHJpemVzIiwiZ2FtZSIsInJlY2FwdGNoYVRva2VuIiwic2F2ZVNjb3JlIiwic2VuZCIsInRvTG93ZXJDYXNlIiwibWluIiwibWF4IiwiYWpheCIsImRhdGFUeXBlIiwiZmFpbCIsImRlY29kZVVSSUNvbXBvbmVudCIsImxvYWRUYWtlb3ZlciIsImNoYW5nZUFjdGlvbiIsIm9wZW5NaW5pZ2FtZSIsInBsYXlQZWdnbGUiLCJwbGF5RmxhcHB5IiwicGxheUhhdGNobGluZ3MiLCJ3YWl0IiwibG9hZEF1Y3Rpb25zIiwibWFya2V0cGxhY2VBY3RpdmVBdWN0aW9ucyIsImxheW91dDJjb2wiLCJvdmVyZmxvd1giLCJsb2FkSGlzdG9yeSIsImhpc3RvcnkiLCJmb3JtYXQiLCJjYXJvdXNlbEJlZW1vb3ZBbm5veWFuY2VzIiwiYmFja2dyb3VuZEltYWdlIiwiaDQiLCJjYXJvdXNlbERvd25sb2FkRmFjZSIsImNhcm91c2VsRG93bmxvYWRHdWFyZGlhbiIsImNhcm91c2VsRUUiLCJuYW1lc3BhY2UiLCJjYXJvdXNlbFRha2VvdmVyIiwidGFrZW92ZXJUaXRsZSIsInRha2VvdmVyQW5jaG9yIiwidGFrZW92ZXJINCIsIm1hcmtldE9ic2VydmVyIiwicGV0T2JzZXJ2ZXIiLCJsb2FkV2lzaGxpc3QiLCJtYXJrZXRFbnRyeSIsImFkZFdpc2hpc3RCdXR0b24iLCJidXR0b25zQ29udGFpbmVyIiwiYWRkUHVyY2hhc2UiLCJoaWphY2tCdXlCdXR0b25zIiwiYnV0dG9uVGVtcGxhdGUiLCJkaWFsb2ciLCJwcm9tcHQiLCJhZGRUb1dpc2hsaXN0RmxhdnIiLCJ3aXNobGlzdEVudHJ5IiwibG9hZFBldCIsIm1haW5Db250YWluZXIiLCJhdHRyaWJ1dGVzIiwibG9jYXRpb25JZCIsImdldEF0dHJpYnV0ZSIsImxvYWRQaWN0b01hcCIsImFkZEF1dG9FeHBsb3JlQnV0dG9uIiwibG9hZEV4cGxvcmF0aW9ucyIsImFjdGl2ZSIsInNvbWUiLCJyZWdpb25JZCIsImF1dG9FeHBsb3JlVGVtcGxhdGUiLCJmaWx0ZXJlZExvY2F0aW9ucyIsIm5ld0F1dG9FeHBsb3JlIiwiZ2V0QXV0b0V4cGxvcmVFbnRyeSIsIm5ld0xvY2F0aW9ucyIsImF1dG9FeHBsb3JlIiwibG9hZFBpY3RvTWFwcyIsImRpc2FibGVFeHBsb3JlIiwiZ2V0UmVnaW9uIiwibWFwTG9jYXRpb24iLCJleHBvcnRQcm9maWxlIiwia2V5cyIsImhhbmRsZVNlbGxCdXR0b24iLCJpdGVtRGV0YWlsU2VsbCIsImRhdGFJdGVtIiwibG9hZFNldHRpbmdzIiwiYWNjb3VudFJpZ2h0Iiwic2V0dGluZ3NUZW1wbGF0ZSIsImdldFNldHRpbmdzIiwicmVsb2FkU2V0dGluZ3MiLCJpbXBvcnRTZXR0aW5ncyIsImV4cG9ydFNldHRpbmdzIiwic2V0U2V0dGluZ3MiLCJtYXJrZXRwbGFjZU1lbnUiLCJ3aXNobGlzdEJ1dHRvblRlbXBsYXRlIiwid2lzaGxpc3RCdXR0b24iLCJpbnNlcnRXaXNobGlzdCIsImZpbHRlcnMiLCJ3aXNobGlzdFRlbXBsYXRlIiwiY29udGFpbmVyIiwid2lzaGxpc3RDb250ZXh0IiwidHIiLCJyZXNldFN0YXR1cyIsImRlbGV0ZUJ1dHRvbiIsImRlbGV0ZUl0ZW0iLCJlZGl0UHJpY2UiLCJjaGFuZ2VQcmljZSIsImxvYWRVSSIsIm1lbnVJbm5lclJpZ2h0IiwibWVudVRlbXBsYXRlIiwibWFpbk1lbnVGb3J1bSIsImNsYXNzIiwibG9hZE1lbnUiLCJjYXJvdXNlbElubmVyIiwiY29udGV4dHMiLCJiYW5uZXIiLCJjb250YWlucyIsImxvYWRDYXJvdXNlbCIsImhvbWVDb250ZW50U21hbGxzIiwic21hbGxUZW1wbGF0ZSIsInNtYWxsQ29udGVudCIsImxvYWRIb21lQ29udGVudCIsInByb2ZpbGVDb250YWN0QWN0aW9ucyIsInByb2ZpbGVBY3Rpb25FeHBvcnQiLCJhY3Rpb25EZXNjcmlwdGlvbiIsInByb2ZpbGVBY3Rpb25Eb3dubG9hZCIsImxvYWRQcm9maWxlIiwic2VhcmNoSXRlbXMiLCJsb2FkTWFya2V0IiwiaXRlbXNGb3JTYWxlIiwibGlzIiwic2FsZURldGFpbCIsInNlbGxCdXR0b24iLCJoYW5kbGVJdGVtc0ZvclNhbGUiLCJsb2FkU2VsbCIsImJhY2tncm91bmQiLCJoZWlnaHQiLCJtYXNrIiwibWluSGVpZ2h0IiwibWluV2lkdGgiLCJwb3NpdGlvbiIsInRyYW5zZm9ybSIsIndpZHRoIiwic2V0dXBCYWNrZ3JvdW5kIiwicHJldmlld091dGVyIiwicGFkZGluZyIsInByZXZpZXciLCJsZWZ0IiwidG9wIiwibWF4SGVpZ2h0IiwibWF4V2lkdGgiLCJzZXR1cExlZnRQYW5lbCIsInJpZ2h0UGFuZWwiLCJwYWRkaW5nVG9wIiwic2V0dXBSaWdodFBhbmVsIiwibG9hZERyZXNzaW5nRXhwZXJpZW5jZSIsInJlYWR5U3RhdGUiLCJsb2FkSW5kZXhlZERiIiwid2luZG93Il0sInNvdXJjZVJvb3QiOiIifQ==