User:Eejit43/scripts/AFCRHS.js

// // Note: This script was compiled and minified from TypeScript. For a more readable version, see https://github.com/Eejit43/wikipedia-scripts/blob/main/scripts/AFCRHS.ts

"use strict";(function{if(mw.config.get("wgPageName")!=="Wikipedia:Articles_for_creation/Redirects"&&mw.config.get("wgPageName")!=="Wikipedia:Articles_for_creation/Categories")return;const w=mw.config.get("wgPageName").replace(/_/g," "),c=[];let R=[];const N=" (AFCRHS 2)";let x=0,P=0;const m=[],H=[],j={exists:"The title you suggested already exists on Wikipedia",blank:"We cannot accept empty submissions","no-target":" A redirect cannot be created unless the target is an existing article. Either you have not specified the target, or the target does not exist",unlikely:"The title you suggested seems unlikely. Could you provide a source showing that it is a commonly used alternate name?","not-redirect":"This request is not a redirect request",custom:""},D={exists:"The category you suggested already exists on Wikipedia",blank:"We cannot accept empty submissions",unlikely:"It seems unlikely that there are enough pages to support this category","not-category":"This request is not a category request",custom:""};async function M{let e=await S(w);e=z(e);const l=/==.*?==/;e=e.substring(e.search(l)),R=e.match(/^==.*?==$((\r?\n?)(?!==[^=]).*)*/gim);for(let a=0;a<R.length;a++)if(!/(\{\{\s*afc(?!\s+comment)|This is an archived discussion)/i.test(R[a])){const n=R[a].match(l)[0];if(n.search(/Redirect request/i)!==-1){const r=/\[\[(\s*[^=]*?)*?\]\]/g,u=n.match(r);if(!u)continue;for(let i=0;i<u.length;i++)u[i]=u[i].replace(/\/g,""),u[i].charAt(0)===":"&&(u[i]=u[i].substring(1));/Target of redirect:\s*\[\[([^[\]]*)\]\]/i.test(R[a]);const f=$.trim(RegExp.$1),g=/Reason:[ \t]*?(.+)/i.exec(R[a]),A=g&&g[1].trim?g[1]:null,k=/Source.*?:[ \t]*?(.+)/i.exec(R[a]),v=k&&k[1].trim?k[1]:null,_={type:"redirect",from:[],section:a,to:f,title:f,reason:A,source:v};for(let i=0;i=0&&(u=u.substring(d));const f=[];let h=null;const g=/\[\[\s*:\s*(Category:[^\][]*)\]\]/gi;do h=g.exec(u),h&&f.push(h[1]);while(h);const A={type:"category",title:r,section:a,id:x,action:"",parents:f.join(",")};x++,c.push(A),m.push(A)}}const o=$(" Reviewing AfC redirect requests ");E(o);const b=o.parent;let p=1;const s=[{label:"Accept",value:"accept"},{label:"Decline",value:"decline"},{label:"Comment",value:"comment"},{label:"None",selected:!0,value:"none"}];for(let a=0;a"),r=$("");if(c[a].type==="redirect"){if(r.append("Redirect(s) to "),t){if(!c[a].to)for(let d=c[a].from.length-1;d>=0;d--)H.push({id:c[a].from[d].id,reason:"not-redirect"})}else for(let d=c[a].from.length-1;d>=0;d--)H.push({id:c[a].from[d].id,reason:"no-target"});c[a]===""||c[a]===" "?(r.append("Empty submission #"+p),p++):t.length>0?r.append($("").attr("href",mw.config.get("wgArticlePath").replace("$1",encodeURIComponent(c[a].to))).attr("target","_blank").text(c[a].to)):r.append("no target given: ");const u=$("").appendTo(r);for(let d=0;d");c[a].reason&&g.append("Reason: "+c[a].reason+""),c[a].source&&g.append("Source: "+c[a].source+"");const A='http://www.google.com/search?q="'+encodeURIComponent(h)+'"+-wikipedia.org';u.append($("").append("From: "+h+" ( Google &middot; what links here) ').append(g).append($(" ").attr("for","afcHelper_redirect_action_"+f.id).text("Action: ")).append(U("afcHelper_redirect_action_"+f.id,s,F(f.id))).append($(" ").attr("id","afcHelper_redirect_extra_"+f.id)))}}else{const u=c[a].id;r.append("Category submission: ").append($("").attr("href","/wiki/"+c[a].title).attr("title",c[a].title).text(c[a].title)).append(" ").append($(" ").attr("for","afcHelper_redirect_action_"+u).text("Action: ")).append(U("afcHelper_redirect_action_"+u,s,F(u))).append($(" ").attr("id","afcHelper_redirect_extra_"+u))}n.append(r),b.append(n)}b.append($(" ").attr("id","afcHelper_redirect_done_button").attr("name","afcHelper_redirect_done_button").text("Done").click(L));for(let a=0;a<H.length;a++)$("#afcHelper_redirect_action_"+H[a].id).attr("value","decline"),q(H[a].id),$("#afcHelper_redirect_decline_"+H[a].id).attr("value",H[a].reason)}function F(e){return function{q(e)}}function q(e){const l=$("#afcHelper_redirect_extra_"+e),o=$("#afcHelper_redirect_action_"+e).val;l.html(""),o==="accept"?(m[e].type==="redirect"?(l.append('<label for="afcHelper_redirect_from_'+e+'">From: '),l.append($(" ").attr("type","text").attr("name","afcHelper_redirect_from_"+e).attr("id","afcHelper_redirect_from_"+e).attr("value",m[e].title)),l.html(l.html+' <label for="afcHelper_redirect_to_'+e+'">To: <input type="text" name="afcHelper_redirect_to_'+e+'" id="afcHelper_redirect_to_'+e+'" value="'+m[e].to+'" />'),l.html(l.html+' <label for="afcHelper_redirect_append_'+e+'">Template to append: (<a href="https://en.wikipedia.org/wiki/Wikipedia:TMR" target="_blank">Help</a>) '),l.html(l.html+I("afcHelper_redirect_append_"+e,[{label:"None",selected:!0,value:"none"},{labelAndValue:"Frequently used",disabled:!0},{labelAndValue:"R from alternative language"},{labelAndValue:"R from alternative name"},{labelAndValue:"R from modification"},{labelAndValue:"R to section"},{labelAndValue:"R from diacritic"},{labelAndValue:"R to diacritic"},{labelAndValue:"From \u2013 abbreviation, capitalisation, and grammar",disabled:!0},{labelAndValue:"R from acronym"},{labelAndValue:"R from initialism"},{labelAndValue:"R from CamelCase"},{labelAndValue:"R from miscapitalisation"},{labelAndValue:"R from other capitalisation"},{labelAndValue:"R from modification"},{labelAndValue:"R from plural"},{label:"From parts of speach",value:"From parts of speach",disabled:!0},{labelAndValue:"R from adjective"},{labelAndValue:"R from adverb"},{labelAndValue:"R from common noun"},{labelAndValue:"R from gerund"},{labelAndValue:"R from proper noun"},{labelAndValue:"R from verb"},{labelAndValue:"From \u2013 spelling",disabled:!0},{labelAndValue:"R from alternative spelling"},{labelAndValue:"R from misspelling"},{labelAndValue:"R from American English"},{labelAndValue:"R from British English"},{labelAndValue:"R from ASCII-only"},{labelAndValue:"R from diacritic"},{labelAndValue:"R from ligature"},{labelAndValue:"R from stylization"},{labelAndValue:"R from alternative transliteration"},{labelAndValue:"R from Wade\u2013Giles romanization"},{labelAndValue:"From alternative names, general",disabled:!0},{labelAndValue:"R from alternative language"},{labelAndValue:"R from alternative name"},{labelAndValue:"R from former name"},{labelAndValue:"R from historic name"},{labelAndValue:"R from incomplete name"},{labelAndValue:"R from incorrect name"},{labelAndValue:"R from letter\u2013word combination"},{labelAndValue:"R from long name"},{labelAndValue:"R from portmanteau"},{labelAndValue:"R from predecessor company name"},{labelAndValue:"R from short name"},{labelAndValue:"R from sort name"},{labelAndValue:"R from less specific name"},{labelAndValue:"R from more specific name"},{labelAndValue:"R from antonym"},{labelAndValue:"R from eponym"},{labelAndValue:"R from synonym"},{labelAndValue:"R from Roman numerals"},{labelAndValue:"From alternative names, geography",disabled:!0},{labelAndValue:"R from Canadian settlement name"},{labelAndValue:"R from name and country"},{labelAndValue:"R from city and state"},{labelAndValue:"R from city and province"},{labelAndValue:"R from more specific geographic name"},{labelAndValue:"R from postal abbreviation"},{labelAndValue:"R from postal code"},{labelAndValue:"R from US postal abbreviation"},{labelAndValue:"From alternative names, organisms",disabled:!0},{labelAndValue:"R from scientific abbreviation"},{labelAndValue:"R from scientific name"},{labelAndValue:"R from alternative scientific name"},{labelAndValue:"R from monotypic taxon"},{labelAndValue:"From alternative names, people",disabled:!0},{labelAndValue:"R from birth name"},{labelAndValue:"R from given name"},{labelAndValue:"R from married name"},{labelAndValue:"R from name with title"},{labelAndValue:"R from non-neutral name"},{labelAndValue:"R from personal name"},{labelAndValue:"R from pseudonym"},{labelAndValue:"R from relative"},{labelAndValue:"R from spouse"},{labelAndValue:"R from surname"},{labelAndValue:"From alternative names, technical",disabled:!0},{labelAndValue:"R from Bluebook abbreviation"},{labelAndValue:"R from brand name"},{labelAndValue:"R from drug trade name"},{labelAndValue:"R from file name"},{labelAndValue:"R from Java package name"},{labelAndValue:"R from MathSciNet abbreviation"},{labelAndValue:"R from molecular formula"},{labelAndValue:"R from NLM abbreviation"},{labelAndValue:"R from product name"},{labelAndValue:"R from slogan"},{labelAndValue:"R from symbol"},{labelAndValue:"R from systematic abbreviations"},{labelAndValue:"R from technical name"},{labelAndValue:"R from trademark"},{labelAndValue:"From \u2013 navigation",disabled:!0},{labelAndValue:"R from file metadata link"},{labelAndValue:"R mentioned in hatnote"},{labelAndValue:"R from shortcut"},{labelAndValue:"R from template shortcut"},{labelAndValue:"From disambiguations",disabled:!0},{labelAndValue:"R from ambiguous term"},{labelAndValue:"R from incomplete disambiguation"},{labelAndValue:"R from incorrect disambiguation"},{labelAndValue:"R from other disambiguation"},{labelAndValue:"R from predictable disambiguation"},{labelAndValue:"R from unnecessary disambiguation"},{labelAndValue:"From mergers, duplicates, and moves",disabled:!0},{labelAndValue:"R from duplicated article"},{labelAndValue:"R with history"},{labelAndValue:"R from merge"},{labelAndValue:"R from move"},{labelAndValue:"R with old history"},{labelAndValue:"From fiction",disabled:!0},{labelAndValue:"R from fictional character"},{labelAndValue:"R from fictional element"},{labelAndValue:"R from fictional location"},{labelAndValue:"From related info",disabled:!0},{labelAndValue:"R from album"},{labelAndValue:"R from animal"},{labelAndValue:"R from book"},{labelAndValue:"R from catchphrase"},{labelAndValue:"R from domain name"},{labelAndValue:"R from top-level domain"},{labelAndValue:"R from film"},{labelAndValue:"R from gender"},{labelAndValue:"R from legislation"},{labelAndValue:"R from list topic"},{labelAndValue:"R from member"},{labelAndValue:"R from person"},{labelAndValue:"R from phrase"},{labelAndValue:"R from quotation"},{labelAndValue:"R from related word"},{labelAndValue:"R from school"},{labelAndValue:"R from song"},{labelAndValue:"R from subtopic"},{labelAndValue:"R from team"},{labelAndValue:"R from work"},{labelAndValue:"R from writer"},{labelAndValue:"R from Unicode"},{labelAndValue:"To \u2013 grammar, punctuation, and spelling",disabled:!0},{labelAndValue:"R to acronym"},{labelAndValue:"R to initialism"},{labelAndValue:"R to ASCII-only title"},{labelAndValue:"R to diacritic"},{labelAndValue:"R to ligature"},{labelAndValue:"R to plural"},{labelAndValue:"To alternative names",disabled:!0},{labelAndValue:"R to former name"},{labelAndValue:"R to historic name"},{labelAndValue:"R to joint biography"},{labelAndValue:"R to name with title"},{labelAndValue:"R to monotypic taxon"},{labelAndValue:"R to scientific name"},{labelAndValue:"R to systematic name"},{labelAndValue:"R to technical name"},{labelAndValue:"To \u2013 navigation and disambiguation",disabled:!0},{labelAndValue:"R to anchor"},{labelAndValue:"R to anthroponymy page"},{labelAndValue:"R to disambiguation page"},{labelAndValue:"R to list entry"},{labelAndValue:"R to section"},{labelAndValue:"To miscellaneous",disabled:!0},{labelAndValue:"R to decade"},{labelAndValue:"R to related topic"},{labelAndValue:"R to subpage"},{labelAndValue:"R to subtopic"},{labelAndValue:"R to TV episode list entry"},{label:"Custom - prompt me",value:"custom"}]))):(l.html('<label for="afcHelper_redirect_name_'+e+'">Category name: <input type="text" size="100" name="afcHelper_redirect_name_'+e+'" id="afcHelper_redirect_name_'+e+'" value="'+m[e].title+'" />'),l.html(l.html+' <label for="afcHelper_redirect_parents_'+e+'">Parent categories (comma-separated): <input type="text" size="100" id="afcHelper_redirect_parents_'+e+'" name="afcHelper_redirect_parents_'+e+'" value="'+m[e].parents+'" />'),l.append(" "),l.append($(" ",{type:"checkbox",name:"afcHelper_redirect_container_"+e,id:"afcHelper_redirect_container_"+e})),l.append('<label for="afcHelper_redirect_container_'+e+'">This is a <a href="/wiki/Wikipedia:Container_category" title="Wikipedia:Container category">container category</a> '),l.html(l.html+' <input type="checkbox" name="afcHelper_redirect_container_'+e+'"')),l.html(l.html+' <label for="afcHelper_redirect_comment_'+e+'">Comment: <input type="text" size="100" id="afcHelper_redirect_comment_'+e+'" name="afcHelper_redirect_comment_'+e+'"/>')):o==="decline"?(m[e].type==="redirect"?l.html('<label for="afcHelper_redirect_decline_'+e+'">Reason for decline: '+I("afcHelper_redirect_decline_"+e,[{label:"Already exists",value:"exists"},{label:"Blank request",value:"blank"},{label:"No valid target specified",value:"no-target"},{label:"Unlikely search term",value:"unlikely"},{label:"Not a redirect request",value:"not-redirect"},{label:"Custom - reason below",selected:!0,value:"custom"}])):l.html('<label for="afcHelper_redirect_decline_'+e+'">Reason for decline: '+I("afcHelper_redirect_decline_"+e,[{label:"Already exists",value:"exists"},{label:"Blank request",value:"blank"},{label:"Unlikely category",value:"unlikely"},{label:"Not a category request",value:"not-category"},{label:"Custom - reason below",selected:!0,value:"custom"}])),l.html(l.html+' <label for="afcHelper_redirect_comment_'+e+'">Comment: <input type="text" size="100" id="afcHelper_redirect_comment_'+e+'" name="afcHelper_redirect_comment_'+e+'"/>')):o==="none"?l.html(""):l.html(l.html+'<label for="afcHelper_redirect_comment_'+e+'">Comment: <input type="text" size="100" id="afcHelper_redirect_comment_'+e+'" name="afcHelper_redirect_comment_'+e+'"/>')}async function L{for(let a=0;a<m.length;a++){const t=$("#afcHelper_redirect_action_"+a).val;m[a].action=t,t!=="none"&&(t==="accept"?m[a].type==="redirect"?(m[a].title=$("#afcHelper_redirect_from_"+a).val,m[a].to=$("#afcHelper_redirect_to_"+a).val,m[a].append=$("#afcHelper_redirect_append_"+a).val,m[a].append==="custom"&&(m[a].append=prompt("Please enter the template to append to "+m[a].title+". Do not include the curly brackets.")),m[a].append==="none"||m[a].append===null?m[a].append="":m[a].append=""):(m[a].title=$("#afcHelper_redirect_name_"+a).val,m[a].parents=$("#afcHelper_redirect_parents_"+a).val,m[a].container=$("#afcHelper_redirect_container_"+a).is(":checked")):t==="decline"&&(m[a].reason=$("#afcHelper_redirect_decline_"+a).val),m[a].comment=$("#afcHelper_redirect_comment_"+a).val)}E('<ul id="afcHelper_status"></ul><ul id="afcHelper_finish"></ul>');const e=function(a){$("#afcHelper_status").append(a)};$("#afcHelper_finish").html($("#afcHelper_finish").html+'<span id="afcHelper_finished_wrapper"><span id="afcHelper_finished_main" style="display:none"><li id="afcHelper_done">Done (<a href="'+mw.config.get("wgArticlePath").replace("$1",encodeURI(w))+'?action=purge" title="'+w+'">Reload page</a>)</li> ');let l=await S(w,e),o=0,b=0,p=0;e("<li>Processing "+c.length+" submission"+(c.length===1?"":"s")+"...</li>");for(let a=0;a<c.length;a++){const t=c[a];if(l.indexOf(R[t.section])===-1){e("<li>Skipping "+t.title+": Cannot find section. Perhaps it was modified in the mean time?</li>");continue}let n=R[t.section];const r=l.indexOf(R[t.section]),u=r+n.length;if(t.type==="category")if(t.action==="accept"){let d="";t.container&&(d+=` `),t.parents!==""&&(d=t.parents.split(",").map(A=>""+A+"").join(` `)),C(t.title,d,"Created via Articles for Creation",!0);const f="",h=new mw.Title(t.title).getTalkPage.toText;C(h,f,"Placing WPAFC project banner",!0);const g=n.match(/==[^=]*==/)[0];n=g+`

`+n.substring(g.length),t.comment!==""?n+=` `:n+=` `,n+=` `,o++}else if(t.action==="decline"){const d=n.match(/==[^=]*==/)[0];let f=D[t.reason];if(f===""?f=t.comment:t.comment!==""&&(f=f+": "+t.comment),f===""){$("afcHelper_status").html($("#afcHelper_status").html+"<li>Skipping "+t.title+": No decline reason specified.</li>");continue}n=d+`
 * accept ~

`+n.substring(d.length),t.comment===""?n+=` `:n+=` `,n+=` `,b++}else t.action==="comment"&&(t.comment!==""&&(n+=`
 * `+t.reason+` ~
 * decline ~

`),p++);else{let d="",f="",h="",g=0,A=0,T=0,k=!1;for(let _=0;_<t.from.length;_++){const i=t.from[_];if(i.action==="accept"){const V=`#REDIRECT ${i.to}${i.append?`

`:""}`;C(i.title,V,"Redirected page to "+i.to+" via Articles for Creation",!0);const W=new mw.Title(i.title);if(!W.isTalkPage){const O=W.getTalkPage.toText;C(O,"","Placing WPAFC project banner",!0)}d+=i.title+" &rarr; "+i.to,i.comment!==""?(d+=": "+i.comment,k=!0):d+=". ",g++}else if(i.action==="decline"){let V=j[i.reason];if(V===""?V=i.comment:i.comment!==""&&(V=V+": "+i.comment),V===""){$("#afcHelper_status").html($("#afcHelper_status").html+"<li>Skipping "+i.title+": No decline reason specified.</li>");continue}f+=i.reason==="blank"||i.reason==="not-redirect"?V+". ":i.title+" &rarr; "+i.to+": "+V+". ",A++}else i.action==="comment"&&(h+=i.title+": "+i.comment+". ",T++)}let v="";if(g>0&&(v+=` `,!k&&g===t.from.length&&(g>1?v=` `:v=` `),g+A+T>0)if(g+A===t.from.length){const _=n.match(/==[^=]*==/)[0];g>0&&A>0?n=_+` `+n.substring(_.length):g>0?n=_+` `+n.substring(_.length):n=_+` `+n.substring(_.length),n+=v,n+=` `}else n+=v+` `;o+=g,b+=A,p+=T}l=l.substring(0,r)+n+l.substring(u)}let s="Updating submission status:";o>0&&(s+=" accepting "+o+" request"+(o>1?"s":"")),b>0&&(o>0&&(s+=","),s+=" declining "+b+" request"+(b>1?"s":"")),p>0&&((o>0||b>0)&&(s+=","),s+=" commenting on "+p+" request"+(p>1?"s":"")),C(w,l,s,!1),$(document).ajaxStop(=>{$("#afcHelper_finished_main").css("display","")})}async function S(e,l){l=typeof l<"u"?l:function{},l('<li id="afcHelper_get'+y(e)+'">Getting <a href="'+mw.config.get("wgArticlePath").replace("$1",encodeURI(e))+'" title="'+e+'">'+e+"</a></li>");const o=await new mw.Api.get({action:"query",prop:"revisions",rvprop:"content",format:"json",indexpageids:!0,titles:e}),b=o.query.pageids[0];if(b==="-1")return l('The page <a class="new" href="'+mw.config.get("wgArticlePath").replace("$1",encodeURI(e))+'" title="'+e+'">'+e+"</a> does not exist"),"";const p=o.query.pages[b].revisions[0]["*"];return l('<li id="afcHelper_get'+y(e)+'">Got <a href="'+mw.config.get("wgArticlePath").replace("$1",encodeURI(e))+'" title="'+e+'">'+e+"</a></li>"),p}function z(e){const l=/(\[){1,2}(?:https?:)?\/\/(en.wikipedia.org\/wiki|enwp.org)\/([^\s|\][]+)(\s|\|)?((?:\[\^[\*\]\]|[^\][])*)(\]){1,2}/gi,o=e;let b;for(b=l.exec(o);){const p=decodeURI(b[3].replace(/_/g," "));let s=decodeURI(b[5].replace(/_/g," "));p===s&&(s="");const a=""+s:"")+"";e=e.replace(b[0],a)}return e}function I(e,l){return U(e,l).prop("outerHTML")}function U(e,l,o){const b=$(" ").attr("name",e).attr("id",e);return o!==null&&b.change(o),l.forEach(p=>{p.labelAndValue&&(p.value=p.labelAndValue,p.label=p.labelAndValue);const s=$(" ").appendTo(b).val(p.value).text(p.label);p.selected&&s.attr("selected","selected"),p.disabled&&s.attr("disabled","disabled")}),b}function E(e,l){if(!arguments.length||e===""||e===null)return $("#display-message").empty.hide,!0;{let o=$("#display-message");if(!o.length)if(o=$('<div id="display-message" style="margin:1em;padding:0.5em 2.5%;border:solid 1px #ddd;background-color:#fcfcfc;font-size: 0.8em"> '),mw.util.$content.length)mw.util.$content.prepend(o);else return!1;return l&&o.prop("class","display-message-"+l),typeof e=="object"?(o.empty,o.append(e)):o.html(e),o[0].scrollIntoView,!0}}function y(e){return e.replace(/[!"#$%&'*+,./:;<=>?@[\\\]^`{|}~ ]/g,"")}function C(e,l,o,b,p){const s=mw.config.get("wgArticlePath");o+=N,$("#afcHelper_finished_wrapper").html('<span id="afcHelper_AJAX_finished_'+P+'" style="display:none">'+$("#afcHelper_finished_wrapper").html+" ");const a=P;P++,$("#afcHelper_status").html($("#afcHelper_status").html+'<li id="afcHelper_edit'+y(e)+'">Editing <a href="'+s.replace("$1",encodeURI(e))+'" title="'+e+'">'+e+"</a></li>");const t={action:"edit",title:e,text:l,summary:o};b&&(t.createonly=!0);const n=new mw.Api;if(n.postWithEditToken(t).done(r=>{r&&r.edit&&r.edit.result&&r.edit.result==="Success"?$("#afcHelper_edit"+y(e)).html('Saved <a href="'+s.replace("$1",encodeURI(e))+'" title="'+e+'">'+e+"</a>"):($("#afcHelper_edit"+y(e)).html('<span class="afcHelper_notice">Edit failed on <a href="'+s.replace("$1",encodeURI(e))+'" title="'+e+'">'+e+"</a>. Error info: "+JSON.stringify(r)),console.error("Edit failed on %s (%s). Error info: %s",s.replace("$1",encodeURI(e)),e,JSON.stringify(r)))}).fail(r=>{b&&r==="articleexists"?$("#afcHelper_edit"+y(e)).html('<span class="afcHelper_notice">Edit failed on <a href="'+s.replace("$1",encodeURI(e))+'" title="'+e+'">'+e+"</a> . Error info: The article already exists!"):$("#afcHelper_edit"+y(e)).html('<span class="afcHelper_notice">Edit failed on <a href="'+s.replace("$1",encodeURI(e))+'" title="'+e+'">'+e+"</a> . Error info: "+r)}).always(=>{$("#afcHelper_AJAX_finished_"+a).css("display","")}),!p&&$(".patrollink").length){const r=$(".patrollink a").attr("href"),u=mw.util.getParamValue("rcid",r);if(u){$("#afcHelper_status").html($("#afcHelper_status").html+'<li id="afcHelper_patrol'+y(e)+'">Marking <a href="'+s.replace("$1",encodeURI(e))+'" title="'+e+'">'+e+" as patrolled</a></li>");const d={action:"patrol",format:"json",rcid:u};n.postWithToken("patrol",d).done(f=>{f?$("#afcHelper_patrol"+y(e)).html('Marked <a href="'+s.replace("$1",encodeURI(e))+'" title="'+e+'">'+e+"</a> as patrolled"):($("#afcHelper_patrol"+y(e)).html('<span class="afcHelper_notice">Patrolling failed on <a href="'+s.replace("$1",encodeURI(e))+'" title="'+e+'">'+e+"</a> with an unknown error"),console.error("Patrolling failed on %s (%s) with an unknown error.",s.replace("$1",encodeURI(e)),e))}).fail(f=>{$("#afcHelper_patrol"+y(e)).html('<span class="afcHelper_notice">Patrolling failed on <a href="'+s.replace("$1",encodeURI(e))+'" title="'+e+'">'+e+"</a>. Error info: "+f)})}}}mw.loader.using(["mediawiki.api","mediawiki.util"],=>{mw.util.addCSS(`   margin: revert;    border: revert;    background: revert;    padding: revert; }`);const e=mw.util.addPortletLink(mw.config.get("skin")==="minerva"?"p-tb":"p-cactions","#","Review AFC/RC","ca-afcrhs","Review","a");$(e).click(l=>{l.preventDefault,c.length=0,R.length=0,x=0,m.length=0,H.length=0,M})})});
 * accept ~"),A>0&&(v+=`
 * decline ~"),T>0&&(v+=`
 * "),v+=`
 * all ~
 * 1) display-message * {

// //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc2NyaXB0cy9BRkNSSFMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIihmdW5jdGlvbiAoKSB7XG4gICAgaWYgKG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSAhPT0gJ1dpa2lwZWRpYTpBcnRpY2xlc19mb3JfY3JlYXRpb24vUmVkaXJlY3RzJyAmJiBtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJykgIT09ICdXaWtpcGVkaWE6QXJ0aWNsZXNfZm9yX2NyZWF0aW9uL0NhdGVnb3JpZXMnKSByZXR1cm47XG5cbiAgICBjb25zdCByZWRpcmVjdFBhZ2VOYW1lID0gbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLnJlcGxhY2UoL18vZywgJyAnKTtcbiAgICBjb25zdCByZWRpcmVjdFN1Ym1pc3Npb25zID0gW107XG4gICAgbGV0IHJlZGlyZWN0U2VjdGlvbnMgPSBbXTtcbiAgICBjb25zdCBzdW1tYXJ5QWR2ZXJ0ID0gJyAoW1tVc2VyOkVlaml0NDMvc2NyaXB0cy9BRkNSSFN8QUZDUkhTIDJdXSknO1xuICAgIGxldCBudW1Ub3RhbCA9IDA7XG4gICAgbGV0IGFqYXhOdW1iZXIgPSAwO1xuICAgIGNvbnN0IHN1Ym1pc3Npb25zID0gW107XG4gICAgY29uc3QgbmVlZHNVcGRhdGUgPSBbXTtcbiAgICBjb25zdCByZWRpcmVjdERlY2xpbmVSZWFzb25zID0ge1xuICAgICAgICBleGlzdHM6ICdUaGUgdGl0bGUgeW91IHN1Z2dlc3RlZCBhbHJlYWR5IGV4aXN0cyBvbiBXaWtpcGVkaWEnLFxuICAgICAgICBibGFuazogJ1dlIGNhbm5vdCBhY2NlcHQgZW1wdHkgc3VibWlzc2lvbnMnLFxuICAgICAgICAnbm8tdGFyZ2V0JzogJyBBIHJlZGlyZWN0IGNhbm5vdCBiZSBjcmVhdGVkIHVubGVzcyB0aGUgdGFyZ2V0IGlzIGFuIGV4aXN0aW5nIGFydGljbGUuIEVpdGhlciB5b3UgaGF2ZSBub3Qgc3BlY2lmaWVkIHRoZSB0YXJnZXQsIG9yIHRoZSB0YXJnZXQgZG9lcyBub3QgZXhpc3QnLFxuICAgICAgICB1bmxpa2VseTogJ1RoZSB0aXRsZSB5b3Ugc3VnZ2VzdGVkIHNlZW1zIHVubGlrZWx5LiBDb3VsZCB5b3UgcHJvdmlkZSBhIHNvdXJjZSBzaG93aW5nIHRoYXQgaXQgaXMgYSBjb21tb25seSB1c2VkIGFsdGVybmF0ZSBuYW1lPycsXG4gICAgICAgICdub3QtcmVkaXJlY3QnOiAnVGhpcyByZXF1ZXN0IGlzIG5vdCBhIHJlZGlyZWN0IHJlcXVlc3QnLFxuICAgICAgICBjdXN0b206ICcnLFxuICAgIH07XG4gICAgY29uc3QgY2F0ZWdvcnlEZWNsaW5lUmVhc29ucyA9IHtcbiAgICAgICAgZXhpc3RzOiAnVGhlIGNhdGVnb3J5IHlvdSBzdWdnZXN0ZWQgYWxyZWFkeSBleGlzdHMgb24gV2lraXBlZGlhJyxcbiAgICAgICAgYmxhbms6ICdXZSBjYW5ub3QgYWNjZXB0IGVtcHR5IHN1Ym1pc3Npb25zJyxcbiAgICAgICAgdW5saWtlbHk6ICdJdCBzZWVtcyB1bmxpa2VseSB0aGF0IHRoZXJlIGFyZSBlbm91Z2ggcGFnZXMgdG8gc3VwcG9ydCB0aGlzIGNhdGVnb3J5JyxcbiAgICAgICAgJ25vdC1jYXRlZ29yeSc6ICdUaGlzIHJlcXVlc3QgaXMgbm90IGEgY2F0ZWdvcnkgcmVxdWVzdCcsXG4gICAgICAgIGN1c3RvbTogJycsXG4gICAgfTtcblxuICAgIC8qKlxuICAgICAqIEluaXRpYWxpemVzIHRoZSByZWRpcmVjdCBoYW5kbGVyXG4gICAgICovXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVkaXJlY3RJbml0KCkge1xuICAgICAgICBsZXQgcGFnZVRleHQgPSBhd2FpdCBnZXRQYWdlVGV4dChyZWRpcmVjdFBhZ2VOYW1lKTtcbiAgICAgICAgLy8gQ2xlYW51cCB0aGUgd2lraXBlZGlhIGxpbmtzIGZvciBwcmV2ZW50aW5nIHN0dWZmIGxpa2UgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3cvaW5kZXgucGhwP2RpZmY9NTc2MjQ0MDY3Jm9sZGlkPTU3NjIyMTQzN1xuICAgICAgICBwYWdlVGV4dCA9IGNsZWFudXBMaW5rcyhwYWdlVGV4dCk7XG5cbiAgICAgICAgLy8gRmlyc3QsIHN0cmlwIG91dCB0aGUgcGFydHMgYmVmb3JlIHRoZSBmaXJzdCBzZWN0aW9uXG4gICAgICAgIGNvbnN0IHNlY3Rpb25SZWdleCA9IC89PS4qPz09LztcbiAgICAgICAgcGFnZVRleHQgPSBwYWdlVGV4dC5zdWJzdHJpbmcocGFnZVRleHQuc2VhcmNoKHNlY3Rpb25SZWdleCkpO1xuICAgICAgICAvLyBUaGVuIHNwbGl0IGl0IGludG8gdGhlIHJlc3Qgb2YgdGhlIHNlY3Rpb25zXG4gICAgICAgIHJlZGlyZWN0U2VjdGlvbnMgPSBwYWdlVGV4dC5tYXRjaCgvXj09Lio/PT0kKChcXHI/XFxuPykoPyE9PVtePV0pLiopKi9naW0pO1xuXG4gICAgICAgIC8vIFBhcnNlIHRoZSBzZWN0aW9uc1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlZGlyZWN0U2VjdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGNsb3NlZCA9IC8oXFx7XFx7XFxzKmFmYyg/IVxccytjb21tZW50KXxUaGlzIGlzIGFuIGFyY2hpdmVkIGRpc2N1c3Npb24pL2kudGVzdChyZWRpcmVjdFNlY3Rpb25zW2ldKTtcbiAgICAgICAgICAgIGlmICghY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyID0gcmVkaXJlY3RTZWN0aW9uc1tpXS5tYXRjaChzZWN0aW9uUmVnZXgpWzBdO1xuICAgICAgICAgICAgICAgIGlmIChoZWFkZXIuc2VhcmNoKC9SZWRpcmVjdCByZXF1ZXN0L2kpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB3aWtpbGlua1JlZ2V4ID0gL1xcW1xcWyhcXHMqW149XSo/KSo/XFxdXFxdL2c7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpbmtzID0gaGVhZGVyLm1hdGNoKHdpa2lsaW5rUmVnZXgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWxpbmtzKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgbCA9IDA7IGwgPCBsaW5rcy5sZW5ndGg7IGwrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGlua3NbbF0gPSBsaW5rc1tsXS5yZXBsYWNlKC9bW1xcXV0vZywgJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmtzW2xdLmNoYXJBdCgwKSA9PT0gJzonKSBsaW5rc1tsXSA9IGxpbmtzW2xdLnN1YnN0cmluZygxKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWdleCA9IC9UYXJnZXQgb2YgcmVkaXJlY3Q6XFxzKlxcW1xcWyhbXltcXF1dKilcXF1cXF0vaTtcbiAgICAgICAgICAgICAgICAgICAgcmVnZXgudGVzdChyZWRpcmVjdFNlY3Rpb25zW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG8gPSAkLnRyaW0oUmVnRXhwLiQxKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWFzb25SZSA9IC9SZWFzb246WyBcXHRdKj8oLispL2k7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlYXNvbk1hdGNoID0gcmVhc29uUmUuZXhlYyhyZWRpcmVjdFNlY3Rpb25zW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVhc29uID0gcmVhc29uTWF0Y2ggJiYgcmVhc29uTWF0Y2hbMV0udHJpbSgpID8gcmVhc29uTWF0Y2hbMV0gOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNvdXJjZVJlID0gL1NvdXJjZS4qPzpbIFxcdF0qPyguKykvaTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc291cmNlTWF0Y2ggPSBzb3VyY2VSZS5leGVjKHJlZGlyZWN0U2VjdGlvbnNbaV0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBzb3VyY2VNYXRjaCAmJiBzb3VyY2VNYXRjaFsxXS50cmltKCkgPyBzb3VyY2VNYXRjaFsxXSA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3VibWlzc2lvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdyZWRpcmVjdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGksXG4gICAgICAgICAgICAgICAgICAgICAgICB0byxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB0byxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsaW5rcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ViID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdyZWRpcmVjdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG51bVRvdGFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaW5rc1tqXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Ym1pc3Npb24uZnJvbS5wdXNoKHN1Yik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJtaXNzaW9ucy5wdXNoKHN1Yik7XG4gICAgICAgICAgICAgICAgICAgICAgICBudW1Ub3RhbCsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0U3VibWlzc2lvbnMucHVzaChzdWJtaXNzaW9uKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhlYWRlci5zZWFyY2goL0NhdGVnb3J5IHJlcXVlc3QvaSkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZpbmQgYSB3aWtpbGluayBpbiB0aGUgaGVhZGVyLCBhbmQgYXNzdW1lIGl0J3MgdGhlIGNhdGVnb3J5IHRvIGNyZWF0ZVxuICAgICAgICAgICAgICAgICAgICBsZXQgY2F0ZWdvcnlOYW1lID0gL1xcW1xcW1teW1xcXV0rXFxdXFxdLy5leGVjKGhlYWRlcik7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2F0ZWdvcnlOYW1lKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnlOYW1lID0gY2F0ZWdvcnlOYW1lWzBdO1xuICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeU5hbWUgPSBjYXRlZ29yeU5hbWUucmVwbGFjZSgvW1tcXF1dL2csICcnKTtcbiAgICAgICAgICAgICAgICAgICAgY2F0ZWdvcnlOYW1lID0gY2F0ZWdvcnlOYW1lLnJlcGxhY2UoL0NhdGVnb3J5XFxzKjpcXHMqL2dpLCAnQ2F0ZWdvcnk6Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYXRlZ29yeU5hbWUuY2hhckF0KDApID09PSAnOicpIGNhdGVnb3J5TmFtZSA9IGNhdGVnb3J5TmFtZS5zdWJzdHJpbmcoMSk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gRmlndXJlIG91dCB0aGUgcGFyZW50IGNhdGVnb3JpZXNcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlcXVlc3RUZXh0ID0gcmVkaXJlY3RTZWN0aW9uc1tpXS5zdWJzdHJpbmcoaGVhZGVyLmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSB3YW50IGNhdGVnb3JpZXMgbGlzdGVkIHVuZGVyIHRoZSBcIlBhcmVudCBjYXRlZ29yeS9jYXRlZ29yaWVzXCIgaGVhZGluZyxcbiAgICAgICAgICAgICAgICAgICAgLy8gKk5PVCogYW55IGNhdGVnb3JpZXMgbGlzdGVkIHVuZGVyIFwiRXhhbXBsZSBwYWdlcyB3aGljaCBiZWxvbmcgdG8gdGhpcyBjYXRlZ29yeVwiLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRIZWFkaW5nSW5kZXggPSByZXF1ZXN0VGV4dC5pbmRleE9mKCdQYXJlbnQgY2F0ZWdvcnkvY2F0ZWdvcmllcycpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50SGVhZGluZ0luZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RUZXh0ID0gcmVxdWVzdFRleHQuc3Vic3RyaW5nKHBhcmVudEhlYWRpbmdJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnRDYXRlZ29yaWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJlbnRDYXRlZ29yeU1hdGNoID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyZW50Q2F0ZWdvcmllc1JlZ2V4ID0gL1xcW1xcW1xccyo6XFxzKihDYXRlZ29yeTpbXlxcXVtdKilcXF1cXF0vZ2k7XG4gICAgICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENhdGVnb3J5TWF0Y2ggPSBwYXJlbnRDYXRlZ29yaWVzUmVnZXguZXhlYyhyZXF1ZXN0VGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50Q2F0ZWdvcnlNYXRjaCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENhdGVnb3JpZXMucHVzaChwYXJlbnRDYXRlZ29yeU1hdGNoWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAocGFyZW50Q2F0ZWdvcnlNYXRjaCk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3VibWlzc2lvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICdjYXRlZ29yeScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogY2F0ZWdvcnlOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbjogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBudW1Ub3RhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbjogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRzOiBwYXJlbnRDYXRlZ29yaWVzLmpvaW4oJywnKSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgbnVtVG90YWwrKztcbiAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RTdWJtaXNzaW9ucy5wdXNoKHN1Ym1pc3Npb24pO1xuICAgICAgICAgICAgICAgICAgICBzdWJtaXNzaW9ucy5wdXNoKHN1Ym1pc3Npb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gRW5kIGlmICFjbG9zZWRcbiAgICAgICAgfSAvLyBFbmQgbG9vcCBvdmVyIHNlY3Rpb25zXG5cbiAgICAgICAgLy8gQnVpbGQgdGhlIGZvcm1cbiAgICAgICAgY29uc3QgJGZvcm0gPSAkKCc8aDM+UmV2aWV3aW5nIEFmQyByZWRpcmVjdCByZXF1ZXN0czwvaDM+Jyk7XG4gICAgICAgIGRpc3BsYXlNZXNzYWdlKCRmb3JtKTtcbiAgICAgICAgY29uc3QgJG1lc3NhZ2VEaXYgPSAkZm9ybS5wYXJlbnQoKTtcbiAgICAgICAgLy8gTGF5b3V0IHRoZSB0ZXh0XG4gICAgICAgIGxldCByZWRpcmVjdEVtcHR5ID0gMTtcbiAgICAgICAgY29uc3QgQUNUSU9OUyA9IFtcbiAgICAgICAgICAgIHsgbGFiZWw6ICdBY2NlcHQnLCB2YWx1ZTogJ2FjY2VwdCcgfSxcbiAgICAgICAgICAgIHsgbGFiZWw6ICdEZWNsaW5lJywgdmFsdWU6ICdkZWNsaW5lJyB9LFxuICAgICAgICAgICAgeyBsYWJlbDogJ0NvbW1lbnQnLCB2YWx1ZTogJ2NvbW1lbnQnIH0sXG4gICAgICAgICAgICB7IGxhYmVsOiAnTm9uZScsIHNlbGVjdGVkOiB0cnVlLCB2YWx1ZTogJ25vbmUnIH0sXG4gICAgICAgIF07XG4gICAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgcmVkaXJlY3RTdWJtaXNzaW9ucy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgbGV0IHN1Ym1pc3Npb25OYW1lO1xuICAgICAgICAgICAgaWYgKHJlZGlyZWN0U3VibWlzc2lvbnNba10udG8gIT09IHVuZGVmaW5lZCkgc3VibWlzc2lvbk5hbWUgPSByZWRpcmVjdFN1Ym1pc3Npb25zW2tdLnRvLnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gICAgICAgICAgICBlbHNlIHN1Ym1pc3Npb25OYW1lID0gJyc7XG4gICAgICAgICAgICBjb25zdCAkdGhpc1N1Ykxpc3QgPSAkKCc8dWw+Jyk7XG4gICAgICAgICAgICBjb25zdCAkdGhpc1N1Ykxpc3RFbGVtZW50ID0gJCgnPGxpPicpO1xuICAgICAgICAgICAgaWYgKHJlZGlyZWN0U3VibWlzc2lvbnNba10udHlwZSA9PT0gJ3JlZGlyZWN0Jykge1xuICAgICAgICAgICAgICAgICR0aGlzU3ViTGlzdEVsZW1lbnQuYXBwZW5kKCdSZWRpcmVjdChzKSB0byAnKTtcbiAgICAgICAgICAgICAgICBpZiAoIXN1Ym1pc3Npb25OYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSByZWRpcmVjdFN1Ym1pc3Npb25zW2tdLmZyb20ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRzVXBkYXRlLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiByZWRpcmVjdFN1Ym1pc3Npb25zW2tdLmZyb21baV0uaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhc29uOiAnbm8tdGFyZ2V0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghcmVkaXJlY3RTdWJtaXNzaW9uc1trXS50bykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gcmVkaXJlY3RTdWJtaXNzaW9uc1trXS5mcm9tLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZWVkc1VwZGF0ZS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcmVkaXJlY3RTdWJtaXNzaW9uc1trXS5mcm9tW2ldLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYXNvbjogJ25vdC1yZWRpcmVjdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmVkaXJlY3RTdWJtaXNzaW9uc1trXSA9PT0gJycgfHwgcmVkaXJlY3RTdWJtaXNzaW9uc1trXSA9PT0gJyAnKSB7XG4gICAgICAgICAgICAgICAgICAgICR0aGlzU3ViTGlzdEVsZW1lbnQuYXBwZW5kKCdFbXB0eSBzdWJtaXNzaW9uICMnICsgcmVkaXJlY3RFbXB0eSk7XG4gICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0RW1wdHkrKztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1Ym1pc3Npb25OYW1lLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgJHRoaXNTdWJMaXN0RWxlbWVudC5hcHBlbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCc8YT4nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdocmVmJywgbXcuY29uZmlnLmdldCgnd2dBcnRpY2xlUGF0aCcpLnJlcGxhY2UoJyQxJywgZW5jb2RlVVJJQ29tcG9uZW50KHJlZGlyZWN0U3VibWlzc2lvbnNba10udG8pKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXR0cigndGFyZ2V0JywgJ19ibGFuaycpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRleHQocmVkaXJlY3RTdWJtaXNzaW9uc1trXS50byksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgJHRoaXNTdWJMaXN0RWxlbWVudC5hcHBlbmQoJzxiPm5vIHRhcmdldCBnaXZlbjwvYj46ICcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCAkZnJvbUxpc3QgPSAkKCc8dWw+JykuYXBwZW5kVG8oJHRoaXNTdWJMaXN0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgbCA9IDA7IGwgPCByZWRpcmVjdFN1Ym1pc3Npb25zW2tdLmZyb20ubGVuZ3RoOyBsKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnJvbSA9IHJlZGlyZWN0U3VibWlzc2lvbnNba10uZnJvbVtsXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRvQXJ0aWNsZSA9IGZyb20udGl0bGU7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b0FydGljbGUucmVwbGFjZSgvXFxzKi9naSwgJycpLmxlbmd0aCA9PT0gMCkgdG9BcnRpY2xlID0gJzxiPm5vIHRpdGxlIHNwZWNpZmllZDwvYj4sIGNoZWNrIHRoZSByZXF1ZXN0IGRldGFpbHMnO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlYXNvbkFuZFNvdXJjZSA9ICQoJzx1bD4nKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZGlyZWN0U3VibWlzc2lvbnNba10ucmVhc29uKSByZWFzb25BbmRTb3VyY2UuYXBwZW5kKCc8bGk+UmVhc29uOiAnICsgcmVkaXJlY3RTdWJtaXNzaW9uc1trXS5yZWFzb24gKyAnPC9saT4nKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZGlyZWN0U3VibWlzc2lvbnNba10uc291cmNlKSByZWFzb25BbmRTb3VyY2UuYXBwZW5kKCc8bGk+U291cmNlOiAnICsgcmVkaXJlY3RTdWJtaXNzaW9uc1trXS5zb3VyY2UgKyAnPC9saT4nKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBnb29nbGVTZWFyY2hVcmwgPSAnaHR0cDovL3d3dy5nb29nbGUuY29tL3NlYXJjaD9xPVwiJyArIGVuY29kZVVSSUNvbXBvbmVudCh0b0FydGljbGUpICsgJ1wiKy13aWtpcGVkaWEub3JnJztcbiAgICAgICAgICAgICAgICAgICAgJGZyb21MaXN0LmFwcGVuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJzxsaT4nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGcm9tOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvQXJ0aWNsZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiAoPHNtYWxsPjxhIGhyZWY9J1wiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvb2dsZVNlYXJjaFVybCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXFwnXCIgdGFyZ2V0PVwiX2JsYW5rXCI+R29vZ2xlPC9hPiA8Yj4mbWlkZG90OzwvYj4gPGEgaHJlZj1cImh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NwZWNpYWw6V2hhdExpbmtzSGVyZS8nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudCh0b0FydGljbGUpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcIiB0YXJnZXQ9XCJfYmxhbmtcIj53aGF0IGxpbmtzIGhlcmU8L2E+KTwvc21hbGw+PGJyLz4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKHJlYXNvbkFuZFNvdXJjZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCc8bGFiZWw+JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdmb3InLCAnYWZjSGVscGVyX3JlZGlyZWN0X2FjdGlvbl8nICsgZnJvbS5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50ZXh0KCdBY3Rpb246ICcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKGdlbmVyYXRlU2VsZWN0T2JqZWN0KCdhZmNIZWxwZXJfcmVkaXJlY3RfYWN0aW9uXycgKyBmcm9tLmlkLCBBQ1RJT05TLCByZWRpcmVjdE1ha2VBY3Rpb25DaGFuZ2UoZnJvbS5pZCkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoJCgnPGRpdj4nKS5hdHRyKCdpZCcsICdhZmNIZWxwZXJfcmVkaXJlY3RfZXh0cmFfJyArIGZyb20uaWQpKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YklkID0gcmVkaXJlY3RTdWJtaXNzaW9uc1trXS5pZDtcbiAgICAgICAgICAgICAgICAkdGhpc1N1Ykxpc3RFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoJ0NhdGVnb3J5IHN1Ym1pc3Npb246ICcpXG4gICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCc8YT4nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdocmVmJywgJy93aWtpLycgKyByZWRpcmVjdFN1Ym1pc3Npb25zW2tdLnRpdGxlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCd0aXRsZScsIHJlZGlyZWN0U3VibWlzc2lvbnNba10udGl0bGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRleHQocmVkaXJlY3RTdWJtaXNzaW9uc1trXS50aXRsZSksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLmFwcGVuZCgnPGJyIC8+JylcbiAgICAgICAgICAgICAgICAgICAgLmFwcGVuZChcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJzxsYWJlbD4nKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdmb3InLCAnYWZjSGVscGVyX3JlZGlyZWN0X2FjdGlvbl8nICsgc3ViSWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRleHQoJ0FjdGlvbjogJyksXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgLmFwcGVuZChnZW5lcmF0ZVNlbGVjdE9iamVjdCgnYWZjSGVscGVyX3JlZGlyZWN0X2FjdGlvbl8nICsgc3ViSWQsIEFDVElPTlMsIHJlZGlyZWN0TWFrZUFjdGlvbkNoYW5nZShzdWJJZCkpKVxuICAgICAgICAgICAgICAgICAgICAuYXBwZW5kKCQoJzxkaXY+JykuYXR0cignaWQnLCAnYWZjSGVscGVyX3JlZGlyZWN0X2V4dHJhXycgKyBzdWJJZCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJHRoaXNTdWJMaXN0LmFwcGVuZCgkdGhpc1N1Ykxpc3RFbGVtZW50KTtcbiAgICAgICAgICAgICRtZXNzYWdlRGl2LmFwcGVuZCgkdGhpc1N1Ykxpc3QpO1xuICAgICAgICB9IC8vIEVuZCBsb29wIG92ZXIgc2VjdGlvbnNcbiAgICAgICAgJG1lc3NhZ2VEaXYuYXBwZW5kKCQoJzxidXR0b24+JykuYXR0cignaWQnLCAnYWZjSGVscGVyX3JlZGlyZWN0X2RvbmVfYnV0dG9uJykuYXR0cignbmFtZScsICdhZmNIZWxwZXJfcmVkaXJlY3RfZG9uZV9idXR0b24nKS50ZXh0KCdEb25lJykuY2xpY2socmVkaXJlY3RQZXJmb3JtQWN0aW9ucykpO1xuICAgICAgICBmb3IgKGxldCB5ID0gMDsgeSA8IG5lZWRzVXBkYXRlLmxlbmd0aDsgeSsrKSB7XG4gICAgICAgICAgICAkKCcjYWZjSGVscGVyX3JlZGlyZWN0X2FjdGlvbl8nICsgbmVlZHNVcGRhdGVbeV0uaWQpLmF0dHIoJ3ZhbHVlJywgJ2RlY2xpbmUnKTtcbiAgICAgICAgICAgIHJlZGlyZWN0T25BY3Rpb25DaGFuZ2UobmVlZHNVcGRhdGVbeV0uaWQpO1xuICAgICAgICAgICAgJCgnI2FmY0hlbHBlcl9yZWRpcmVjdF9kZWNsaW5lXycgKyBuZWVkc1VwZGF0ZVt5XS5pZCkuYXR0cigndmFsdWUnLCBuZWVkc1VwZGF0ZVt5XS5yZWFzb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWxpYXMgb2YgcmVkaXJlY3RPbkFjdGlvbkNoYW5nZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpZCB0aGUgcmVxdWVzdCBpZFxuICAgICAqIEByZXR1cm5zIHtGdW5jdGlvbn0gdGhlIGZ1bmN0aW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVkaXJlY3RNYWtlQWN0aW9uQ2hhbmdlKGlkKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZWRpcmVjdE9uQWN0aW9uQ2hhbmdlKGlkKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIGFjdGlvbnMgb24gY2hhbmdlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGlkIHRoZSByZXF1ZXN0IGlkXG4gICAgICovXG4gICAgZnVuY3Rpb24gcmVkaXJlY3RPbkFjdGlvbkNoYW5nZShpZCkge1xuICAgICAgICBjb25zdCAkZXh0cmEgPSAkKCcjYWZjSGVscGVyX3JlZGlyZWN0X2V4dHJhXycgKyBpZCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdFZhbHVlID0gJCgnI2FmY0hlbHBlcl9yZWRpcmVjdF9hY3Rpb25fJyArIGlkKS52YWwoKTtcbiAgICAgICAgJGV4dHJhLmh0bWwoJycpOyAvLyBCbGFuayBpdCBmaXJzdFxuICAgICAgICBpZiAoc2VsZWN0VmFsdWUgPT09ICdhY2NlcHQnKSB7XG4gICAgICAgICAgICBpZiAoc3VibWlzc2lvbnNbaWRdLnR5cGUgPT09ICdyZWRpcmVjdCcpIHtcbiAgICAgICAgICAgICAgICAkZXh0cmEuYXBwZW5kKCc8bGFiZWwgZm9yPVwiYWZjSGVscGVyX3JlZGlyZWN0X2Zyb21fJyArIGlkICsgJ1wiPkZyb206IDwvbGFiZWw+Jyk7XG4gICAgICAgICAgICAgICAgJGV4dHJhLmFwcGVuZChcbiAgICAgICAgICAgICAgICAgICAgJCgnPGlucHV0PicpXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cigndHlwZScsICd0ZXh0JylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCduYW1lJywgJ2FmY0hlbHBlcl9yZWRpcmVjdF9mcm9tXycgKyBpZClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5hdHRyKCdpZCcsICdhZmNIZWxwZXJfcmVkaXJlY3RfZnJvbV8nICsgaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAuYXR0cigndmFsdWUnLCBzdWJtaXNzaW9uc1tpZF0udGl0bGUpLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAkZXh0cmEuaHRtbChcbiAgICAgICAgICAgICAgICAgICAgJGV4dHJhLmh0bWwoKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnJm5ic3A7PGJyIC8+PGxhYmVsIGZvcj1cImFmY0hlbHBlcl9yZWRpcmVjdF90b18nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcIj5UbzogPC9sYWJlbD48aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiYWZjSGVscGVyX3JlZGlyZWN0X3RvXycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1wiIGlkPVwiYWZjSGVscGVyX3JlZGlyZWN0X3RvXycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1wiIHZhbHVlPVwiJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJtaXNzaW9uc1tpZF0udG8gK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1wiIC8+JyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICRleHRyYS5odG1sKFxuICAgICAgICAgICAgICAgICAgICAkZXh0cmEuaHRtbCgpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICc8YnIgLz48bGFiZWwgZm9yPVwiYWZjSGVscGVyX3JlZGlyZWN0X2FwcGVuZF8nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcIj5UZW1wbGF0ZSB0byBhcHBlbmQ6ICg8YSBocmVmPVwiaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvV2lraXBlZGlhOlRNUlwiIHRhcmdldD1cIl9ibGFua1wiPkhlbHA8L2E+KTwvbGFiZWw+JyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICRleHRyYS5odG1sKFxuICAgICAgICAgICAgICAgICAgICAkZXh0cmEuaHRtbCgpICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlU2VsZWN0KCdhZmNIZWxwZXJfcmVkaXJlY3RfYXBwZW5kXycgKyBpZCwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdOb25lJywgc2VsZWN0ZWQ6IHRydWUsIHZhbHVlOiAnbm9uZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdGcmVxdWVudGx5IHVzZWQnLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBhbHRlcm5hdGl2ZSBsYW5ndWFnZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gYWx0ZXJuYXRpdmUgbmFtZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gbW9kaWZpY2F0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgdG8gc2VjdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gZGlhY3JpdGljJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgdG8gZGlhY3JpdGljJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ0Zyb20gXHUyMDEzIGFiYnJldmlhdGlvbiwgY2FwaXRhbGlzYXRpb24sIGFuZCBncmFtbWFyJywgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gYWNyb255bScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gaW5pdGlhbGlzbScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gQ2FtZWxDYXNlJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBtaXNjYXBpdGFsaXNhdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gb3RoZXIgY2FwaXRhbGlzYXRpb24nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIG1vZGlmaWNhdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gcGx1cmFsJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdGcm9tIHBhcnRzIG9mIHNwZWFjaCcsIHZhbHVlOiAnRnJvbSBwYXJ0cyBvZiBzcGVhY2gnLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBhZGplY3RpdmUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGFkdmVyYicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gY29tbW9uIG5vdW4nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGdlcnVuZCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gcHJvcGVyIG5vdW4nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHZlcmInIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnRnJvbSBcdTIwMTMgc3BlbGxpbmcnLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBhbHRlcm5hdGl2ZSBzcGVsbGluZycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gbWlzc3BlbGxpbmcnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIEFtZXJpY2FuIEVuZ2xpc2gnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIEJyaXRpc2ggRW5nbGlzaCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gQVNDSUktb25seScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gZGlhY3JpdGljJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBsaWdhdHVyZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gc3R5bGl6YXRpb24nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGFsdGVybmF0aXZlIHRyYW5zbGl0ZXJhdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gV2FkZVx1MjAxM0dpbGVzIHJvbWFuaXphdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdGcm9tIGFsdGVybmF0aXZlIG5hbWVzLCBnZW5lcmFsJywgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gYWx0ZXJuYXRpdmUgbGFuZ3VhZ2UnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGFsdGVybmF0aXZlIG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGZvcm1lciBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBoaXN0b3JpYyBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBpbmNvbXBsZXRlIG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGluY29ycmVjdCBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBsZXR0ZXJcdTIwMTN3b3JkIGNvbWJpbmF0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBsb25nIG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHBvcnRtYW50ZWF1JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBwcmVkZWNlc3NvciBjb21wYW55IG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHNob3J0IG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHNvcnQgbmFtZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gbGVzcyBzcGVjaWZpYyBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBtb3JlIHNwZWNpZmljIG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGFudG9ueW0nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGVwb255bScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gc3lub255bScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gUm9tYW4gbnVtZXJhbHMnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnRnJvbSBhbHRlcm5hdGl2ZSBuYW1lcywgZ2VvZ3JhcGh5JywgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gQ2FuYWRpYW4gc2V0dGxlbWVudCBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBuYW1lIGFuZCBjb3VudHJ5JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBjaXR5IGFuZCBzdGF0ZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gY2l0eSBhbmQgcHJvdmluY2UnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIG1vcmUgc3BlY2lmaWMgZ2VvZ3JhcGhpYyBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBwb3N0YWwgYWJicmV2aWF0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBwb3N0YWwgY29kZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gVVMgcG9zdGFsIGFiYnJldmlhdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdGcm9tIGFsdGVybmF0aXZlIG5hbWVzLCBvcmdhbmlzbXMnLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBzY2llbnRpZmljIGFiYnJldmlhdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gc2NpZW50aWZpYyBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBhbHRlcm5hdGl2ZSBzY2llbnRpZmljIG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIG1vbm90eXBpYyB0YXhvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdGcm9tIGFsdGVybmF0aXZlIG5hbWVzLCBwZW9wbGUnLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBiaXJ0aCBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBnaXZlbiBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBtYXJyaWVkIG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIG5hbWUgd2l0aCB0aXRsZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gbm9uLW5ldXRyYWwgbmFtZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gcGVyc29uYWwgbmFtZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gcHNldWRvbnltJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSByZWxhdGl2ZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gc3BvdXNlJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBzdXJuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ0Zyb20gYWx0ZXJuYXRpdmUgbmFtZXMsIHRlY2huaWNhbCcsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIEJsdWVib29rIGFiYnJldmlhdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gYnJhbmQgbmFtZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gZHJ1ZyB0cmFkZSBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBmaWxlIG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIEphdmEgcGFja2FnZSBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBNYXRoU2NpTmV0IGFiYnJldmlhdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gbW9sZWN1bGFyIGZvcm11bGEnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIE5MTSBhYmJyZXZpYXRpb24nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHByb2R1Y3QgbmFtZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gc2xvZ2FuJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBzeW1ib2wnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHN5c3RlbWF0aWMgYWJicmV2aWF0aW9ucycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gdGVjaG5pY2FsIG5hbWUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHRyYWRlbWFyaycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdGcm9tIFx1MjAxMyBuYXZpZ2F0aW9uJywgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gZmlsZSBtZXRhZGF0YSBsaW5rJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgbWVudGlvbmVkIGluIGhhdG5vdGUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHNob3J0Y3V0JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSB0ZW1wbGF0ZSBzaG9ydGN1dCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdGcm9tIGRpc2FtYmlndWF0aW9ucycsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGFtYmlndW91cyB0ZXJtJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBpbmNvbXBsZXRlIGRpc2FtYmlndWF0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBpbmNvcnJlY3QgZGlzYW1iaWd1YXRpb24nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIG90aGVyIGRpc2FtYmlndWF0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBwcmVkaWN0YWJsZSBkaXNhbWJpZ3VhdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gdW5uZWNlc3NhcnkgZGlzYW1iaWd1YXRpb24nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnRnJvbSBtZXJnZXJzLCBkdXBsaWNhdGVzLCBhbmQgbW92ZXMnLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBkdXBsaWNhdGVkIGFydGljbGUnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiB3aXRoIGhpc3RvcnknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIG1lcmdlJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBtb3ZlJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1Igd2l0aCBvbGQgaGlzdG9yeScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdGcm9tIGZpY3Rpb24nLCBkaXNhYmxlZDogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBmaWN0aW9uYWwgY2hhcmFjdGVyJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBmaWN0aW9uYWwgZWxlbWVudCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gZmljdGlvbmFsIGxvY2F0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ0Zyb20gcmVsYXRlZCBpbmZvJywgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gYWxidW0nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGFuaW1hbCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gYm9vaycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gY2F0Y2hwaHJhc2UnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGRvbWFpbiBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSB0b3AtbGV2ZWwgZG9tYWluJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBmaWxtJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBnZW5kZXInIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIGxlZ2lzbGF0aW9uJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBsaXN0IHRvcGljJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBtZW1iZXInIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHBlcnNvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gcGhyYXNlJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBxdW90YXRpb24nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiBmcm9tIHJlbGF0ZWQgd29yZCcgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gc2Nob29sJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBzb25nJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBzdWJ0b3BpYycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gdGVhbScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gd29yaycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIGZyb20gd3JpdGVyJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgZnJvbSBVbmljb2RlJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1RvIFx1MjAxMyBncmFtbWFyLCBwdW5jdHVhdGlvbiwgYW5kIHNwZWxsaW5nJywgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIHRvIGFjcm9ueW0nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiB0byBpbml0aWFsaXNtJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgdG8gQVNDSUktb25seSB0aXRsZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIHRvIGRpYWNyaXRpYycgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIHRvIGxpZ2F0dXJlJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgdG8gcGx1cmFsJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1RvIGFsdGVybmF0aXZlIG5hbWVzJywgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIHRvIGZvcm1lciBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgdG8gaGlzdG9yaWMgbmFtZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIHRvIGpvaW50IGJpb2dyYXBoeScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIHRvIG5hbWUgd2l0aCB0aXRsZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIHRvIG1vbm90eXBpYyB0YXhvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIHRvIHNjaWVudGlmaWMgbmFtZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIHRvIHN5c3RlbWF0aWMgbmFtZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIHRvIHRlY2huaWNhbCBuYW1lJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1RvIFx1MjAxMyBuYXZpZ2F0aW9uIGFuZCBkaXNhbWJpZ3VhdGlvbicsIGRpc2FibGVkOiB0cnVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiB0byBhbmNob3InIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiB0byBhbnRocm9wb255bXkgcGFnZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIHRvIGRpc2FtYmlndWF0aW9uIHBhZ2UnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiB0byBsaXN0IGVudHJ5JyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgdG8gc2VjdGlvbicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdUbyBtaXNjZWxsYW5lb3VzJywgZGlzYWJsZWQ6IHRydWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIHRvIGRlY2FkZScgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxhYmVsQW5kVmFsdWU6ICdSIHRvIHJlbGF0ZWQgdG9waWMnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiB0byBzdWJwYWdlJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGFiZWxBbmRWYWx1ZTogJ1IgdG8gc3VidG9waWMnIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbEFuZFZhbHVlOiAnUiB0byBUViBlcGlzb2RlIGxpc3QgZW50cnknIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsYWJlbDogJ0N1c3RvbSAtIHByb21wdCBtZScsIHZhbHVlOiAnY3VzdG9tJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTm93IGNhdGVnb3JpZXNcbiAgICAgICAgICAgICAgICAkZXh0cmEuaHRtbChcbiAgICAgICAgICAgICAgICAgICAgJzxsYWJlbCBmb3I9XCJhZmNIZWxwZXJfcmVkaXJlY3RfbmFtZV8nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcIj5DYXRlZ29yeSBuYW1lOiA8L2xhYmVsPjxpbnB1dCB0eXBlPVwidGV4dFwiIHNpemU9XCIxMDBcIiBuYW1lPVwiYWZjSGVscGVyX3JlZGlyZWN0X25hbWVfJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBpZCArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXCIgaWQ9XCJhZmNIZWxwZXJfcmVkaXJlY3RfbmFtZV8nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcIiB2YWx1ZT1cIicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgc3VibWlzc2lvbnNbaWRdLnRpdGxlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcIiAvPicsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAkZXh0cmEuaHRtbChcbiAgICAgICAgICAgICAgICAgICAgJGV4dHJhLmh0bWwoKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnPGJyIC8+PGxhYmVsIGZvcj1cImFmY0hlbHBlcl9yZWRpcmVjdF9wYXJlbnRzXycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1wiPlBhcmVudCBjYXRlZ29yaWVzIChjb21tYS1zZXBhcmF0ZWQpOjwvbGFiZWw+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgc2l6ZT1cIjEwMFwiIGlkPVwiYWZjSGVscGVyX3JlZGlyZWN0X3BhcmVudHNfJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBpZCArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXCIgbmFtZT1cImFmY0hlbHBlcl9yZWRpcmVjdF9wYXJlbnRzXycgK1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1wiIHZhbHVlPVwiJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJtaXNzaW9uc1tpZF0ucGFyZW50cyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXCIgLz4nLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgJGV4dHJhLmFwcGVuZCgnPGJyIC8+Jyk7XG4gICAgICAgICAgICAgICAgJGV4dHJhLmFwcGVuZCgkKCc8aW5wdXQ+JywgeyB0eXBlOiAnY2hlY2tib3gnLCBuYW1lOiAnYWZjSGVscGVyX3JlZGlyZWN0X2NvbnRhaW5lcl8nICsgaWQsIGlkOiAnYWZjSGVscGVyX3JlZGlyZWN0X2NvbnRhaW5lcl8nICsgaWQgfSkpO1xuICAgICAgICAgICAgICAgICRleHRyYS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgICAgICc8bGFiZWwgZm9yPVwiYWZjSGVscGVyX3JlZGlyZWN0X2NvbnRhaW5lcl8nICsgaWQgKyAnXCI+VGhpcyBpcyBhIDxhIGhyZWY9XCIvd2lraS9XaWtpcGVkaWE6Q29udGFpbmVyX2NhdGVnb3J5XCIgdGl0bGU9XCJXaWtpcGVkaWE6Q29udGFpbmVyIGNhdGVnb3J5XCI+Y29udGFpbmVyIGNhdGVnb3J5PC9hPjwvbGFiZWw+JyxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICRleHRyYS5odG1sKCRleHRyYS5odG1sKCkgKyAnPGJyIC8+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJhZmNIZWxwZXJfcmVkaXJlY3RfY29udGFpbmVyXycgKyBpZCArICdcIicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgJGV4dHJhLmh0bWwoXG4gICAgICAgICAgICAgICAgJGV4dHJhLmh0bWwoKSArXG4gICAgICAgICAgICAgICAgICAgICc8YnIgLz48bGFiZWwgZm9yPVwiYWZjSGVscGVyX3JlZGlyZWN0X2NvbW1lbnRfJyArXG4gICAgICAgICAgICAgICAgICAgIGlkICtcbiAgICAgICAgICAgICAgICAgICAgJ1wiPkNvbW1lbnQ6PC9sYWJlbD48aW5wdXQgdHlwZT1cInRleHRcIiBzaXplPVwiMTAwXCIgaWQ9XCJhZmNIZWxwZXJfcmVkaXJlY3RfY29tbWVudF8nICtcbiAgICAgICAgICAgICAgICAgICAgaWQgK1xuICAgICAgICAgICAgICAgICAgICAnXCIgbmFtZT1cImFmY0hlbHBlcl9yZWRpcmVjdF9jb21tZW50XycgK1xuICAgICAgICAgICAgICAgICAgICBpZCArXG4gICAgICAgICAgICAgICAgICAgICdcIi8+JyxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0VmFsdWUgPT09ICdkZWNsaW5lJykge1xuICAgICAgICAgICAgaWYgKHN1Ym1pc3Npb25zW2lkXS50eXBlID09PSAncmVkaXJlY3QnKSB7XG4gICAgICAgICAgICAgICAgJGV4dHJhLmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICc8bGFiZWwgZm9yPVwiYWZjSGVscGVyX3JlZGlyZWN0X2RlY2xpbmVfJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBpZCArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXCI+UmVhc29uIGZvciBkZWNsaW5lOiA8L2xhYmVsPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVTZWxlY3QoJ2FmY0hlbHBlcl9yZWRpcmVjdF9kZWNsaW5lXycgKyBpZCwgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdBbHJlYWR5IGV4aXN0cycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnZXhpc3RzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdCbGFuayByZXF1ZXN0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdibGFuaycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnTm8gdmFsaWQgdGFyZ2V0IHNwZWNpZmllZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnbm8tdGFyZ2V0JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdVbmxpa2VseSBzZWFyY2ggdGVybScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAndW5saWtlbHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ05vdCBhIHJlZGlyZWN0IHJlcXVlc3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ25vdC1yZWRpcmVjdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnQ3VzdG9tIC0gcmVhc29uIGJlbG93JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnY3VzdG9tJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTm93IGNhdGVnb3JpZXNcbiAgICAgICAgICAgICAgICAkZXh0cmEuaHRtbChcbiAgICAgICAgICAgICAgICAgICAgJzxsYWJlbCBmb3I9XCJhZmNIZWxwZXJfcmVkaXJlY3RfZGVjbGluZV8nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcIj5SZWFzb24gZm9yIGRlY2xpbmU6IDwvbGFiZWw+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZVNlbGVjdCgnYWZjSGVscGVyX3JlZGlyZWN0X2RlY2xpbmVfJyArIGlkLCBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0FscmVhZHkgZXhpc3RzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6ICdleGlzdHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0JsYW5rIHJlcXVlc3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ2JsYW5rJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdVbmxpa2VseSBjYXRlZ29yeScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAndW5saWtlbHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ05vdCBhIGNhdGVnb3J5IHJlcXVlc3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogJ25vdC1jYXRlZ29yeScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnQ3VzdG9tIC0gcmVhc29uIGJlbG93JyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiAnY3VzdG9tJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgXSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgICRleHRyYS5odG1sKFxuICAgICAgICAgICAgICAgICRleHRyYS5odG1sKCkgK1xuICAgICAgICAgICAgICAgICAgICAnPGJyLz48bGFiZWwgZm9yPVwiYWZjSGVscGVyX3JlZGlyZWN0X2NvbW1lbnRfJyArXG4gICAgICAgICAgICAgICAgICAgIGlkICtcbiAgICAgICAgICAgICAgICAgICAgJ1wiPkNvbW1lbnQ6IDwvbGFiZWw+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgc2l6ZT1cIjEwMFwiIGlkPVwiYWZjSGVscGVyX3JlZGlyZWN0X2NvbW1lbnRfJyArXG4gICAgICAgICAgICAgICAgICAgIGlkICtcbiAgICAgICAgICAgICAgICAgICAgJ1wiIG5hbWU9XCJhZmNIZWxwZXJfcmVkaXJlY3RfY29tbWVudF8nICtcbiAgICAgICAgICAgICAgICAgICAgaWQgK1xuICAgICAgICAgICAgICAgICAgICAnXCIvPicsXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKHNlbGVjdFZhbHVlID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgIC8vIEZvciBjYXRlZ29yaWVzIGFuZCByZWRpcmVjdHNcbiAgICAgICAgICAgICRleHRyYS5odG1sKCcnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICRleHRyYS5odG1sKFxuICAgICAgICAgICAgICAgICRleHRyYS5odG1sKCkgK1xuICAgICAgICAgICAgICAgICAgICAnPGxhYmVsIGZvcj1cImFmY0hlbHBlcl9yZWRpcmVjdF9jb21tZW50XycgK1xuICAgICAgICAgICAgICAgICAgICBpZCArXG4gICAgICAgICAgICAgICAgICAgICdcIj5Db21tZW50OiA8L2xhYmVsPjxpbnB1dCB0eXBlPVwidGV4dFwiIHNpemU9XCIxMDBcIiBpZD1cImFmY0hlbHBlcl9yZWRpcmVjdF9jb21tZW50XycgK1xuICAgICAgICAgICAgICAgICAgICBpZCArXG4gICAgICAgICAgICAgICAgICAgICdcIiBuYW1lPVwiYWZjSGVscGVyX3JlZGlyZWN0X2NvbW1lbnRfJyArXG4gICAgICAgICAgICAgICAgICAgIGlkICtcbiAgICAgICAgICAgICAgICAgICAgJ1wiLz4nLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBlcmZvcm0gdGhlIHJlZGlyZWN0IGFjdGlvbnMgc3BlY2lmaWVkIGJ5IHRoZSB1c2VyXG4gICAgICovXG4gICAgYXN5bmMgZnVuY3Rpb24gcmVkaXJlY3RQZXJmb3JtQWN0aW9ucygpIHtcbiAgICAgICAgLy8gTG9hZCBhbGwgb2YgdGhlIGRhdGFcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdWJtaXNzaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gJCgnI2FmY0hlbHBlcl9yZWRpcmVjdF9hY3Rpb25fJyArIGkpLnZhbCgpO1xuICAgICAgICAgICAgc3VibWlzc2lvbnNbaV0uYWN0aW9uID0gYWN0aW9uO1xuICAgICAgICAgICAgaWYgKGFjdGlvbiA9PT0gJ25vbmUnKSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChhY3Rpb24gPT09ICdhY2NlcHQnKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN1Ym1pc3Npb25zW2ldLnR5cGUgPT09ICdyZWRpcmVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgc3VibWlzc2lvbnNbaV0udGl0bGUgPSAkKCcjYWZjSGVscGVyX3JlZGlyZWN0X2Zyb21fJyArIGkpLnZhbCgpO1xuICAgICAgICAgICAgICAgICAgICBzdWJtaXNzaW9uc1tpXS50byA9ICQoJyNhZmNIZWxwZXJfcmVkaXJlY3RfdG9fJyArIGkpLnZhbCgpO1xuICAgICAgICAgICAgICAgICAgICBzdWJtaXNzaW9uc1tpXS5hcHBlbmQgPSAkKCcjYWZjSGVscGVyX3JlZGlyZWN0X2FwcGVuZF8nICsgaSkudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWJtaXNzaW9uc1tpXS5hcHBlbmQgPT09ICdjdXN0b20nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJtaXNzaW9uc1tpXS5hcHBlbmQgPSBwcm9tcHQoJ1BsZWFzZSBlbnRlciB0aGUgdGVtcGxhdGUgdG8gYXBwZW5kIHRvICcgKyBzdWJtaXNzaW9uc1tpXS50aXRsZSArICcuIERvIG5vdCBpbmNsdWRlIHRoZSBjdXJseSBicmFja2V0cy4nKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoc3VibWlzc2lvbnNbaV0uYXBwZW5kID09PSAnbm9uZScgfHwgc3VibWlzc2lvbnNbaV0uYXBwZW5kID09PSBudWxsKSBzdWJtaXNzaW9uc1tpXS5hcHBlbmQgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBzdWJtaXNzaW9uc1tpXS5hcHBlbmQgPSAne3snICsgc3VibWlzc2lvbnNbaV0uYXBwZW5kICsgJ319JztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdWJtaXNzaW9uc1tpXS50aXRsZSA9ICQoJyNhZmNIZWxwZXJfcmVkaXJlY3RfbmFtZV8nICsgaSkudmFsKCk7XG4gICAgICAgICAgICAgICAgICAgIHN1Ym1pc3Npb25zW2ldLnBhcmVudHMgPSAkKCcjYWZjSGVscGVyX3JlZGlyZWN0X3BhcmVudHNfJyArIGkpLnZhbCgpO1xuICAgICAgICAgICAgICAgICAgICBzdWJtaXNzaW9uc1tpXS5jb250YWluZXIgPSAkKCcjYWZjSGVscGVyX3JlZGlyZWN0X2NvbnRhaW5lcl8nICsgaSkuaXMoJzpjaGVja2VkJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT09ICdkZWNsaW5lJykge1xuICAgICAgICAgICAgICAgIHN1Ym1pc3Npb25zW2ldLnJlYXNvbiA9ICQoJyNhZmNIZWxwZXJfcmVkaXJlY3RfZGVjbGluZV8nICsgaSkudmFsKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJtaXNzaW9uc1tpXS5jb21tZW50ID0gJCgnI2FmY0hlbHBlcl9yZWRpcmVjdF9jb21tZW50XycgKyBpKS52YWwoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBEYXRhIGxvYWRlZC4gU2hvdyBwcm9ncmVzcyBzY3JlZW4gYW5kIGdldCBXUDpBRkMvUkMgcGFnZSB0ZXh0XG4gICAgICAgIGRpc3BsYXlNZXNzYWdlKCc8dWwgaWQ9XCJhZmNIZWxwZXJfc3RhdHVzXCI+PC91bD48dWwgaWQ9XCJhZmNIZWxwZXJfZmluaXNoXCI+PC91bD4nKTtcbiAgICAgICAgY29uc3QgYWRkU3RhdHVzID0gZnVuY3Rpb24gKHN0YXR1cykge1xuICAgICAgICAgICAgJCgnI2FmY0hlbHBlcl9zdGF0dXMnKS5hcHBlbmQoc3RhdHVzKTtcbiAgICAgICAgfTtcbiAgICAgICAgJCgnI2FmY0hlbHBlcl9maW5pc2gnKS5odG1sKFxuICAgICAgICAgICAgJCgnI2FmY0hlbHBlcl9maW5pc2gnKS5odG1sKCkgK1xuICAgICAgICAgICAgICAgICc8c3BhbiBpZD1cImFmY0hlbHBlcl9maW5pc2hlZF93cmFwcGVyXCI+PHNwYW4gaWQ9XCJhZmNIZWxwZXJfZmluaXNoZWRfbWFpblwiIHN0eWxlPVwiZGlzcGxheTpub25lXCI+PGxpIGlkPVwiYWZjSGVscGVyX2RvbmVcIj48Yj5Eb25lICg8YSBocmVmPVwiJyArXG4gICAgICAgICAgICAgICAgbXcuY29uZmlnLmdldCgnd2dBcnRpY2xlUGF0aCcpLnJlcGxhY2UoJyQxJywgZW5jb2RlVVJJKHJlZGlyZWN0UGFnZU5hbWUpKSArXG4gICAgICAgICAgICAgICAgJz9hY3Rpb249cHVyZ2VcIiB0aXRsZT1cIicgK1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0UGFnZU5hbWUgK1xuICAgICAgICAgICAgICAgICdcIj5SZWxvYWQgcGFnZTwvYT4pPC9iPjwvbGk+PC9zcGFuPjwvc3Bhbj4nLFxuICAgICAgICApO1xuICAgICAgICBsZXQgcGFnZVRleHQgPSBhd2FpdCBnZXRQYWdlVGV4dChyZWRpcmVjdFBhZ2VOYW1lLCBhZGRTdGF0dXMpO1xuICAgICAgICBsZXQgdG90YWxBY2NlcHQgPSAwO1xuICAgICAgICBsZXQgdG90YWxEZWNsaW5lID0gMDtcbiAgICAgICAgbGV0IHRvdGFsQ29tbWVudCA9IDA7XG4gICAgICAgIC8vIFRyYXZlcnNlIHRoZSBzdWJtaXNzaW9ucyBhbmQgbG9jYXRlIHRoZSByZWxldmFudCBzZWN0aW9uc1xuICAgICAgICBhZGRTdGF0dXMoJzxsaT5Qcm9jZXNzaW5nICcgKyByZWRpcmVjdFN1Ym1pc3Npb25zLmxlbmd0aCArICcgc3VibWlzc2lvbicgKyAocmVkaXJlY3RTdWJtaXNzaW9ucy5sZW5ndGggPT09IDEgPyAnJyA6ICdzJykgKyAnLi4uPC9saT4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWRpcmVjdFN1Ym1pc3Npb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBzdWIgPSByZWRpcmVjdFN1Ym1pc3Npb25zW2ldO1xuICAgICAgICAgICAgaWYgKHBhZ2VUZXh0LmluZGV4T2YocmVkaXJlY3RTZWN0aW9uc1tzdWIuc2VjdGlvbl0pID09PSAtMSkge1xuICAgICAgICAgICAgICAgIC8vIFNvbWVvbmUgaGFzIG1vZGlmaWVkIHRoZSBzZWN0aW9uIGluIHRoZSBtZWFuIHRpbWUsIHNraXBcbiAgICAgICAgICAgICAgICBhZGRTdGF0dXMoJzxsaT5Ta2lwcGluZyAnICsgc3ViLnRpdGxlICsgJzogQ2Fubm90IGZpbmQgc2VjdGlvbi4gUGVyaGFwcyBpdCB3YXMgbW9kaWZpZWQgaW4gdGhlIG1lYW4gdGltZT88L2xpPicpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHRleHQgPSByZWRpcmVjdFNlY3Rpb25zW3N1Yi5zZWN0aW9uXTtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBwYWdlVGV4dC5pbmRleE9mKHJlZGlyZWN0U2VjdGlvbnNbc3ViLnNlY3Rpb25dKTtcbiAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gc3RhcnRJbmRleCArIHRleHQubGVuZ3RoO1xuXG4gICAgICAgICAgICAvLyBGaXJzdCBkZWFsIHdpdGggY2F0ZWdvcmllc1xuICAgICAgICAgICAgaWYgKHN1Yi50eXBlID09PSAnY2F0ZWdvcnknKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN1Yi5hY3Rpb24gPT09ICdhY2NlcHQnKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjYXRlZ29yeVRleHQgPSAnPCEtLUNyZWF0ZWQgYnkgV1A6QUZDIC0tPic7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWIuY29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRlZ29yeVRleHQgKz0gJ1xcbnt7Q29udGFpbmVyIGNhdGVnb3J5fX0nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWIucGFyZW50cyAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGVnb3J5VGV4dCA9IHN1Yi5wYXJlbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKChjYXQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdbWycgKyBjYXQgKyAnXV0nO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJ1xcbicpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVkaXRQYWdlKHN1Yi50aXRsZSwgY2F0ZWdvcnlUZXh0LCAnQ3JlYXRlZCB2aWEgW1tXUDpBRkN8QXJ0aWNsZXMgZm9yIENyZWF0aW9uXV0nLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFsa1RleHQgPSAne3tzdWJzdDpXUEFGQy9hcnRpY2xlfGNsYXNzPUNhdH19JztcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFsa1RpdGxlID0gbmV3IG13LlRpdGxlKHN1Yi50aXRsZSkuZ2V0VGFsa1BhZ2UoKS50b1RleHQoKTtcbiAgICAgICAgICAgICAgICAgICAgZWRpdFBhZ2UodGFsa1RpdGxlLCB0YWxrVGV4dCwgJ1BsYWNpbmcgV1BBRkMgcHJvamVjdCBiYW5uZXInLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyID0gdGV4dC5tYXRjaCgvPT1bXj1dKj09LylbMF07XG4gICAgICAgICAgICAgICAgICAgIHRleHQgPSBoZWFkZXIgKyAnXFxue3tBZkMtY3xhfX1cXG4nICsgdGV4dC5zdWJzdHJpbmcoaGVhZGVyLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdWIuY29tbWVudCAhPT0gJycpIHRleHQgKz0gJ1xcbip7e3N1YnN0OmFmYyBjYXRlZ29yeXxhY2NlcHR8Mj0nICsgc3ViLmNvbW1lbnQgKyAnfX0gfn5+flxcbic7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgdGV4dCArPSAnXFxuKnt7c3Vic3Q6YWZjIGNhdGVnb3J5fX0gfn5+flxcbic7XG4gICAgICAgICAgICAgICAgICAgIHRleHQgKz0gJ3t7QWZDLWN8Yn19XFxuJztcbiAgICAgICAgICAgICAgICAgICAgdG90YWxBY2NlcHQrKztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1Yi5hY3Rpb24gPT09ICdkZWNsaW5lJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBoZWFkZXIgPSB0ZXh0Lm1hdGNoKC89PVtePV0qPT0vKVswXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlYXNvbiA9IGNhdGVnb3J5RGVjbGluZVJlYXNvbnNbc3ViLnJlYXNvbl07XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFzb24gPT09ICcnKSByZWFzb24gPSBzdWIuY29tbWVudDtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3ViLmNvbW1lbnQgIT09ICcnKSByZWFzb24gPSByZWFzb24gKyAnOiAnICsgc3ViLmNvbW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWFzb24gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkKCdhZmNIZWxwZXJfc3RhdHVzJykuaHRtbCgkKCcjYWZjSGVscGVyX3N0YXR1cycpLmh0bWwoKSArICc8bGk+U2tpcHBpbmcgJyArIHN1Yi50aXRsZSArICc6IE5vIGRlY2xpbmUgcmVhc29uIHNwZWNpZmllZC48L2xpPicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGV4dCA9IGhlYWRlciArICdcXG57e0FmQy1jfGR9fVxcbicgKyB0ZXh0LnN1YnN0cmluZyhoZWFkZXIubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1Yi5jb21tZW50ID09PSAnJykgdGV4dCArPSAnXFxuKnt7c3Vic3Q6YWZjIGNhdGVnb3J5fCcgKyBzdWIucmVhc29uICsgJ319IH5+fn5cXG4nO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHRleHQgKz0gJ1xcbip7e3N1YnN0OmFmYyBjYXRlZ29yeXxkZWNsaW5lfDI9JyArIHJlYXNvbiArICd9fSB+fn5+XFxuJztcbiAgICAgICAgICAgICAgICAgICAgdGV4dCArPSAne3tBZkMtY3xifX1cXG4nO1xuICAgICAgICAgICAgICAgICAgICB0b3RhbERlY2xpbmUrKztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN1Yi5hY3Rpb24gPT09ICdjb21tZW50Jykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3ViLmNvbW1lbnQgIT09ICcnKSB0ZXh0ICs9ICdcXG5cXG57e2FmYyBjb21tZW50fDE9JyArIHN1Yi5jb21tZW50ICsgJyB+fn5+fX1cXG4nO1xuICAgICAgICAgICAgICAgICAgICB0b3RhbENvbW1lbnQrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEhhbmRsZSByZWRpcmVjdHNcbiAgICAgICAgICAgICAgICBsZXQgYWNjZXB0Q29tbWVudCA9ICcnO1xuICAgICAgICAgICAgICAgIGxldCBkZWNsaW5lQ29tbWVudCA9ICcnO1xuICAgICAgICAgICAgICAgIGxldCBvdGhlckNvbW1lbnQgPSAnJztcbiAgICAgICAgICAgICAgICBsZXQgYWNjZXB0Q291bnQgPSAwLFxuICAgICAgICAgICAgICAgICAgICBkZWNsaW5lQ291bnQgPSAwLFxuICAgICAgICAgICAgICAgICAgICBjb21tZW50Q291bnQgPSAwLFxuICAgICAgICAgICAgICAgICAgICBoYXNDb21tZW50ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzdWIuZnJvbS5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWRpcmVjdCA9IHN1Yi5mcm9tW2pdO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVkaXJlY3QuYWN0aW9uID09PSAnYWNjZXB0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVkaXJlY3RUZXh0ID0gYCNSRURJUkVDVCBbWyR7cmVkaXJlY3QudG99XV0ke3JlZGlyZWN0LmFwcGVuZCA/IGBcXG5cXG57e1JlZGlyZWN0IGNhdGVnb3J5IHNoZWxsfFxcbiR7cmVkaXJlY3QuYXBwZW5kfVxcbn19YCA6ICcnfWA7XG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0UGFnZShyZWRpcmVjdC50aXRsZSwgcmVkaXJlY3RUZXh0LCAnUmVkaXJlY3RlZCBwYWdlIHRvIFtbJyArIHJlZGlyZWN0LnRvICsgJ11dIHZpYSBbW1dQOkFGQ3xBcnRpY2xlcyBmb3IgQ3JlYXRpb25dXScsIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtd1RpdGxlID0gbmV3IG13LlRpdGxlKHJlZGlyZWN0LnRpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbXdUaXRsZS5pc1RhbGtQYWdlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtd1RhbGtUaXRsZSA9IG13VGl0bGUuZ2V0VGFsa1BhZ2UoKS50b1RleHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWxrVGV4dCA9ICd7e3N1YnN0OldQQUZDL3JlZGlyZWN0fX0nO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRpdFBhZ2UobXdUYWxrVGl0bGUsIHRhbGtUZXh0LCAnUGxhY2luZyBXUEFGQyBwcm9qZWN0IGJhbm5lcicsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXB0Q29tbWVudCArPSByZWRpcmVjdC50aXRsZSArICcgJnJhcnI7ICcgKyByZWRpcmVjdC50bztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWRpcmVjdC5jb21tZW50ICE9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdENvbW1lbnQgKz0gJzogJyArIHJlZGlyZWN0LmNvbW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ29tbWVudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdENvbW1lbnQgKz0gJy4gJztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdENvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVkaXJlY3QuYWN0aW9uID09PSAnZGVjbGluZScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZWFzb24gPSByZWRpcmVjdERlY2xpbmVSZWFzb25zW3JlZGlyZWN0LnJlYXNvbl07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVhc29uID09PSAnJykgcmVhc29uID0gcmVkaXJlY3QuY29tbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlZGlyZWN0LmNvbW1lbnQgIT09ICcnKSByZWFzb24gPSByZWFzb24gKyAnOiAnICsgcmVkaXJlY3QuY29tbWVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFzb24gPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2FmY0hlbHBlcl9zdGF0dXMnKS5odG1sKCQoJyNhZmNIZWxwZXJfc3RhdHVzJykuaHRtbCgpICsgJzxsaT5Ta2lwcGluZyAnICsgcmVkaXJlY3QudGl0bGUgKyAnOiBObyBkZWNsaW5lIHJlYXNvbiBzcGVjaWZpZWQuPC9saT4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRlY2xpbmVDb21tZW50ICs9IHJlZGlyZWN0LnJlYXNvbiA9PT0gJ2JsYW5rJyB8fCByZWRpcmVjdC5yZWFzb24gPT09ICdub3QtcmVkaXJlY3QnID8gcmVhc29uICsgJy4gJyA6IHJlZGlyZWN0LnRpdGxlICsgJyAmcmFycjsgJyArIHJlZGlyZWN0LnRvICsgJzogJyArIHJlYXNvbiArICcuICc7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWNsaW5lQ291bnQrKztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZWRpcmVjdC5hY3Rpb24gPT09ICdjb21tZW50Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXJDb21tZW50ICs9IHJlZGlyZWN0LnRpdGxlICsgJzogJyArIHJlZGlyZWN0LmNvbW1lbnQgKyAnLiAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudENvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHJlYXNvbiA9ICcnO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFjY2VwdENvdW50ID4gMCkgcmVhc29uICs9ICdcXG4qe3tzdWJzdDphZmMgcmVkaXJlY3R8YWNjZXB0fDI9JyArIGFjY2VwdENvbW1lbnQgKyAnIFRoYW5rIHlvdSBmb3IgeW91ciBjb250cmlidXRpb25zIHRvIFdpa2lwZWRpYSF9fSB+fn5+JztcbiAgICAgICAgICAgICAgICBpZiAoZGVjbGluZUNvdW50ID4gMCkgcmVhc29uICs9ICdcXG4qe3tzdWJzdDphZmMgcmVkaXJlY3R8ZGVjbGluZXwyPScgKyBkZWNsaW5lQ29tbWVudCArICd9fSB+fn5+JztcbiAgICAgICAgICAgICAgICBpZiAoY29tbWVudENvdW50ID4gMCkgcmVhc29uICs9ICdcXG4qe3thZmMgY29tbWVudHwxPScgKyBvdGhlckNvbW1lbnQgKyAnfn5+fn19JztcbiAgICAgICAgICAgICAgICByZWFzb24gKz0gJ1xcbic7XG4gICAgICAgICAgICAgICAgaWYgKCFoYXNDb21tZW50ICYmIGFjY2VwdENvdW50ID09PSBzdWIuZnJvbS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2VwdENvdW50ID4gMSkgcmVhc29uID0gJ1xcbip7e3N1YnN0OmFmYyByZWRpcmVjdHxhbGx9fSB+fn5+XFxuJztcbiAgICAgICAgICAgICAgICAgICAgZWxzZSByZWFzb24gPSAnXFxuKnt7c3Vic3Q6YWZjIHJlZGlyZWN0fX0gfn5+flxcbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhY2NlcHRDb3VudCArIGRlY2xpbmVDb3VudCArIGNvbW1lbnRDb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2VwdENvdW50ICsgZGVjbGluZUNvdW50ID09PSBzdWIuZnJvbS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEV2ZXJ5IHJlcXVlc3QgaGFuZGxlZCwgY2xvc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGhlYWRlciA9IHRleHQubWF0Y2goLz09W149XSo9PS8pWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjY2VwdENvdW50ID4gMCAmJiBkZWNsaW5lQ291bnQgPiAwKSB0ZXh0ID0gaGVhZGVyICsgJ1xcbnt7QWZDLWN8cH19JyArIHRleHQuc3Vic3RyaW5nKGhlYWRlci5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoYWNjZXB0Q291bnQgPiAwKSB0ZXh0ID0gaGVhZGVyICsgJ1xcbnt7QWZDLWN8YX19JyArIHRleHQuc3Vic3RyaW5nKGhlYWRlci5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB0ZXh0ID0gaGVhZGVyICsgJ1xcbnt7QWZDLWN8ZH19JyArIHRleHQuc3Vic3RyaW5nKGhlYWRlci5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCArPSByZWFzb247XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ICs9ICd7e0FmQy1jfGJ9fVxcbic7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB0ZXh0ICs9IHJlYXNvbiArICdcXG4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0b3RhbEFjY2VwdCArPSBhY2NlcHRDb3VudDtcbiAgICAgICAgICAgICAgICB0b3RhbERlY2xpbmUgKz0gZGVjbGluZUNvdW50O1xuICAgICAgICAgICAgICAgIHRvdGFsQ29tbWVudCArPSBjb21tZW50Q291bnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYWdlVGV4dCA9IHBhZ2VUZXh0LnN1YnN0cmluZygwLCBzdGFydEluZGV4KSArIHRleHQgKyBwYWdlVGV4dC5zdWJzdHJpbmcoZW5kSW5kZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHN1bW1hcnkgPSAnVXBkYXRpbmcgc3VibWlzc2lvbiBzdGF0dXM6JztcbiAgICAgICAgaWYgKHRvdGFsQWNjZXB0ID4gMCkgc3VtbWFyeSArPSAnIGFjY2VwdGluZyAnICsgdG90YWxBY2NlcHQgKyAnIHJlcXVlc3QnICsgKHRvdGFsQWNjZXB0ID4gMSA/ICdzJyA6ICcnKTtcbiAgICAgICAgaWYgKHRvdGFsRGVjbGluZSA+IDApIHtcbiAgICAgICAgICAgIGlmICh0b3RhbEFjY2VwdCA+IDApIHN1bW1hcnkgKz0gJywnO1xuICAgICAgICAgICAgc3VtbWFyeSArPSAnIGRlY2xpbmluZyAnICsgdG90YWxEZWNsaW5lICsgJyByZXF1ZXN0JyArICh0b3RhbERlY2xpbmUgPiAxID8gJ3MnIDogJycpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b3RhbENvbW1lbnQgPiAwKSB7XG4gICAgICAgICAgICBpZiAodG90YWxBY2NlcHQgPiAwIHx8IHRvdGFsRGVjbGluZSA+IDApIHN1bW1hcnkgKz0gJywnO1xuICAgICAgICAgICAgc3VtbWFyeSArPSAnIGNvbW1lbnRpbmcgb24gJyArIHRvdGFsQ29tbWVudCArICcgcmVxdWVzdCcgKyAodG90YWxDb21tZW50ID4gMSA/ICdzJyA6ICcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVkaXRQYWdlKHJlZGlyZWN0UGFnZU5hbWUsIHBhZ2VUZXh0LCBzdW1tYXJ5LCBmYWxzZSk7XG5cbiAgICAgICAgLy8gRGlzcGxheSB0aGUgXCJEb25lXCIgdGV4dCBvbmx5IGFmdGVyIGFsbCBhamF4IHJlcXVlc3RzIGFyZSBjb21wbGV0ZWRcbiAgICAgICAgJChkb2N1bWVudCkuYWpheFN0b3AoKCkgPT4ge1xuICAgICAgICAgICAgJCgnI2FmY0hlbHBlcl9maW5pc2hlZF9tYWluJykuY3NzKCdkaXNwbGF5JywgJycpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSB0ZXh0IG9mIGEgcGFnZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSB0aGUgdGl0bGUgb2YgdGhlIHBhZ2UgdG8gZ2V0XG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gYWRkU3RhdHVzIGEgZnVuY3Rpb24gdGhhdCB0YWtlcyBhIEhUTUwgc3RyaW5nIHRvIHJlcG9ydCBzdGF0dXNcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgdGV4dCBvZiB0aGUgcGFnZVxuICAgICAqL1xuICAgIGFzeW5jIGZ1bmN0aW9uIGdldFBhZ2VUZXh0KHRpdGxlLCBhZGRTdGF0dXMpIHtcbiAgICAgICAgYWRkU3RhdHVzID0gdHlwZW9mIGFkZFN0YXR1cyAhPT0gJ3VuZGVmaW5lZCcgPyBhZGRTdGF0dXMgOiBmdW5jdGlvbiAoKSB7fTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICAgICAgYWRkU3RhdHVzKFxuICAgICAgICAgICAgJzxsaSBpZD1cImFmY0hlbHBlcl9nZXQnICsganFFc2NhcGUodGl0bGUpICsgJ1wiPkdldHRpbmcgPGEgaHJlZj1cIicgKyBtdy5jb25maWcuZ2V0KCd3Z0FydGljbGVQYXRoJykucmVwbGFjZSgnJDEnLCBlbmNvZGVVUkkodGl0bGUpKSArICdcIiB0aXRsZT1cIicgKyB0aXRsZSArICdcIj4nICsgdGl0bGUgKyAnPC9hPjwvbGk+JyxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBjb25zdCByZXF1ZXN0ID0ge1xuICAgICAgICAvLyAgICAgYWN0aW9uOiAncXVlcnknLFxuICAgICAgICAvLyAgICAgcHJvcDogJ3JldmlzaW9ucycsXG4gICAgICAgIC8vICAgICBydnByb3A6ICdjb250ZW50JyxcbiAgICAgICAgLy8gICAgIGZvcm1hdDogJ2pzb24nLFxuICAgICAgICAvLyAgICAgaW5kZXhwYWdlaWRzOiB0cnVlLFxuICAgICAgICAvLyAgICAgdGl0bGVzOiB0aXRsZSxcbiAgICAgICAgLy8gfTtcblxuICAgICAgICAvLyBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoXG4gICAgICAgIC8vICAgICAkLmFqYXgoe1xuICAgICAgICAvLyAgICAgICAgIHVybDogbXcudXRpbC53aWtpU2NyaXB0KCdhcGknKSxcbiAgICAgICAgLy8gICAgICAgICBkYXRhOiByZXF1ZXN0LFxuICAgICAgICAvLyAgICAgICAgIGFzeW5jOiBmYWxzZSxcbiAgICAgICAgLy8gICAgIH0pLnJlc3BvbnNlVGV4dCxcbiAgICAgICAgLy8gKTtcblxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG5ldyBtdy5BcGkoKS5nZXQoeyBhY3Rpb246ICdxdWVyeScsIHByb3A6ICdyZXZpc2lvbnMnLCBydnByb3A6ICdjb250ZW50JywgZm9ybWF0OiAnanNvbicsIGluZGV4cGFnZWlkczogdHJ1ZSwgdGl0bGVzOiB0aXRsZSB9KTtcblxuICAgICAgICBjb25zdCBwYWdlSWQgPSByZXNwb25zZS5xdWVyeS5wYWdlaWRzWzBdO1xuICAgICAgICBpZiAocGFnZUlkID09PSAnLTEnKSB7XG4gICAgICAgICAgICBhZGRTdGF0dXMoJ1RoZSBwYWdlIDxhIGNsYXNzPVwibmV3XCIgaHJlZj1cIicgKyBtdy5jb25maWcuZ2V0KCd3Z0FydGljbGVQYXRoJykucmVwbGFjZSgnJDEnLCBlbmNvZGVVUkkodGl0bGUpKSArICdcIiB0aXRsZT1cIicgKyB0aXRsZSArICdcIj4nICsgdGl0bGUgKyAnPC9hPiBkb2VzIG5vdCBleGlzdCcpO1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5ld1RleHQgPSByZXNwb25zZS5xdWVyeS5wYWdlc1twYWdlSWRdLnJldmlzaW9uc1swXVsnKiddO1xuICAgICAgICBhZGRTdGF0dXMoJzxsaSBpZD1cImFmY0hlbHBlcl9nZXQnICsganFFc2NhcGUodGl0bGUpICsgJ1wiPkdvdCA8YSBocmVmPVwiJyArIG13LmNvbmZpZy5nZXQoJ3dnQXJ0aWNsZVBhdGgnKS5yZXBsYWNlKCckMScsIGVuY29kZVVSSSh0aXRsZSkpICsgJ1wiIHRpdGxlPVwiJyArIHRpdGxlICsgJ1wiPicgKyB0aXRsZSArICc8L2E+PC9saT4nKTtcbiAgICAgICAgcmV0dXJuIG5ld1RleHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYW5zIHVwIHRoZSBsaW5rcyBpbiBhIHBhZ2VcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCB0aGUgcGFnZSBjb250ZW50XG4gICAgICogQHJldHVybnMge3N0cmluZ30gdGhlIHBhZ2UgY29udGVudCB3aXRoIHRoZSBsaW5rcyBjbGVhbmVkIHVwXG4gICAgICovXG4gICAgZnVuY3Rpb24gY2xlYW51cExpbmtzKHRleHQpIHtcbiAgICAgICAgLy8gQ29udmVydCBleHRlcm5hbCBsaW5rcyB0byBXaWtpcGVkaWEgYXJ0aWNsZXMgdG8gcHJvcGVyIHdpa2lsaW5rc1xuICAgICAgICBjb25zdCB3aWtpbGlua1JlZ2V4ID0gLyhcXFspezEsMn0oPzpodHRwcz86KT9cXC9cXC8oZW4ud2lraXBlZGlhLm9yZ1xcL3dpa2l8ZW53cC5vcmcpXFwvKFteXFxzfFxcXVtdKykoXFxzfFxcfCk/KCg/OlxcW1xcW1teW1xcXV0qXFxdXFxdfFteXFxdW10pKikoXFxdKXsxLDJ9L2dpO1xuICAgICAgICBjb25zdCB0ZW1wVGV4dCA9IHRleHQ7XG4gICAgICAgIGxldCBtYXRjaDtcbiAgICAgICAgd2hpbGUgKChtYXRjaCA9IHdpa2lsaW5rUmVnZXguZXhlYyh0ZW1wVGV4dCkpKSB7XG4gICAgICAgICAgICBjb25zdCBwYWdlTmFtZSA9IGRlY29kZVVSSShtYXRjaFszXS5yZXBsYWNlKC9fL2csICcgJykpO1xuICAgICAgICAgICAgbGV0IGRpc3BsYXluYW1lID0gZGVjb2RlVVJJKG1hdGNoWzVdLnJlcGxhY2UoL18vZywgJyAnKSk7XG4gICAgICAgICAgICBpZiAocGFnZU5hbWUgPT09IGRpc3BsYXluYW1lKSBkaXNwbGF5bmFtZSA9ICcnO1xuICAgICAgICAgICAgY29uc3QgcmVwbGFjZVRleHQgPSAnW1snICsgcGFnZU5hbWUgKyAoZGlzcGxheW5hbWUgPyAnfCcgKyBkaXNwbGF5bmFtZSA6ICcnKSArICddXSc7XG4gICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKG1hdGNoWzBdLCByZXBsYWNlVGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2VuZXJhdGVzIHRoZSBzZWxlY3QgZWxlbWVudCBvdXRlciBIVE1MIGZvciBhIHJlcXVlc3RcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgdGhlIHBhZ2UgdGl0bGVcbiAgICAgKiBAcGFyYW0ge29iamVjdFtdfSBvcHRpb25zIHRoZSBzZWxlY3QgZWxlbWVudCBvcHRpb25zXG4gICAgICogQHJldHVybnMge3N0cmluZ30gdGhlIHNlbGVjdCBlbGVtZW50IG91dGVyIEhUTUxcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZW5lcmF0ZVNlbGVjdCh0aXRsZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gZ2VuZXJhdGVTZWxlY3RPYmplY3QodGl0bGUsIG9wdGlvbnMpLnByb3AoJ291dGVySFRNTCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdlbmVyYXRlcyBhIHNlbGVjdCBlbGVtZW50IGZvciBhIHJlcXVlc3RcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgdGhlIHBhZ2UgdGl0bGVcbiAgICAgKiBAcGFyYW0ge29iamVjdFtdfSBvcHRpb25zIHRoZSBzZWxlY3QgZWxlbWVudCBvcHRpb25zXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gb25jaGFuZ2UgdGhlIG9uY2hhbmdlIGZ1bmN0aW9uXG4gICAgICogQHJldHVybnMgeyp9IHRoZSBzZWxlY3QgalF1ZXJ5IGVsZW1lbnRcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZW5lcmF0ZVNlbGVjdE9iamVjdCh0aXRsZSwgb3B0aW9ucywgb25jaGFuZ2UpIHtcbiAgICAgICAgY29uc3QgJHNlbGVjdCA9ICQoJzxzZWxlY3Q+JykuYXR0cignbmFtZScsIHRpdGxlKS5hdHRyKCdpZCcsIHRpdGxlKTtcbiAgICAgICAgaWYgKG9uY2hhbmdlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAkc2VsZWN0LmNoYW5nZShvbmNoYW5nZSk7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgICAgICAgIGlmIChvcHRpb24ubGFiZWxBbmRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbi52YWx1ZSA9IG9wdGlvbi5sYWJlbEFuZFZhbHVlO1xuICAgICAgICAgICAgICAgIG9wdGlvbi5sYWJlbCA9IG9wdGlvbi5sYWJlbEFuZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgJG9wdGlvbiA9ICQoJzxvcHRpb24+JykuYXBwZW5kVG8oJHNlbGVjdCkudmFsKG9wdGlvbi52YWx1ZSkudGV4dChvcHRpb24ubGFiZWwpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCkgJG9wdGlvbi5hdHRyKCdzZWxlY3RlZCcsICdzZWxlY3RlZCcpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbi5kaXNhYmxlZCkgJG9wdGlvbi5hdHRyKCdkaXNhYmxlZCcsICdkaXNhYmxlZCcpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuICRzZWxlY3Q7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIG9sZCBtdy51dGlsLmpzTWVzc2FnZSBmdW5jdGlvbiBiZWZvcmUgaHR0cHM6Ly9nZXJyaXQud2lraW1lZGlhLm9yZy9yLyMvYy8xNzYwNS8sIHdoaWNoXG4gICAgICogaW50cm9kdWNlZCB0aGUgc2lsbHkgYXV0by1oaWRlIGZ1bmN0aW9uLiBBbHNvIHdpdGggdGhlIG9yaWdpbmFsIHN0eWxlcy5cbiAgICAgKiBBZGQgYSBsaXR0bGUgYm94IGF0IHRoZSB0b3Agb2YgdGhlIHNjcmVlbiB0byBpbmZvcm0gdGhlIHVzZXIgb2ZcbiAgICAgKiBzb21ldGhpbmcsIHJlcGxhY2luZyBhbnkgcHJldmlvdXMgbWVzc2FnZS5cbiAgICAgKiBDYWxsaW5nIHdpdGggbm8gYXJndW1lbnRzLCB3aXRoIGFuIGVtcHR5IHN0cmluZyBvciBudWxsIHdpbGwgaGlkZSB0aGUgbWVzc2FnZVxuICAgICAqIFRha2VuIGZyb20gW1tVc2VyOlRpbW90aGV1cyBDYW5lbnMvZGlzcGxheW1lc3NhZ2UuanNdXVxuICAgICAqIEBwYXJhbSB7Kn0gbWVzc2FnZSBUaGUgRE9NLWVsZW1lbnQsIGpRdWVyeSBvYmplY3Qgb3IgSFRNTC1zdHJpbmcgdG8gYmUgcHV0IGluc2lkZSB0aGUgbWVzc2FnZSBib3guXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZSBVc2VkIGluIGFkZGluZyBhIGNsYXNzOyBzaG91bGQgYmUgZGlmZmVyZW50IGZvciBlYWNoIGNhbGwgdG8gYWxsb3cgQ1NTL0pTIHRvIGhpZGUgZGlmZmVyZW50IGJveGVzLiBudWxsID0gbm8gY2xhc3MgdXNlZC5cbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBvbiBzdWNjZXNzLCBmYWxzZSBvbiBmYWlsdXJlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGRpc3BsYXlNZXNzYWdlKG1lc3NhZ2UsIGNsYXNzTmFtZSkge1xuICAgICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGggfHwgbWVzc2FnZSA9PT0gJycgfHwgbWVzc2FnZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgJCgnI2Rpc3BsYXktbWVzc2FnZScpLmVtcHR5KCkuaGlkZSgpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIEVtcHR5aW5nIGFuZCBoaWRpbmcgbWVzc2FnZSBpcyBpbnRlbmRlZCBiZWhhdmlvdXIsIHJldHVybiB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBXZSBzcGVjaWFsLWNhc2Ugc2tpbiBzdHJ1Y3R1cmVzIHByb3ZpZGVkIGJ5IHRoZSBzb2Z0d2FyZS4gU2tpbnMgdGhhdFxuICAgICAgICAgICAgLy8gY2hvb3NlIHRvIGFiYW5kb24gb3Igc2lnbmlmaWNhbnRseSBtb2RpZnkgb3VyIGZvcm1hdHRpbmcgY2FuIGp1c3QgZGVmaW5lXG4gICAgICAgICAgICAvLyBhbiBtdy1qcy1tZXNzYWdlIGRpdiB0byBzdGFydCB3aXRoLlxuICAgICAgICAgICAgbGV0ICRtZXNzYWdlRGl2ID0gJCgnI2Rpc3BsYXktbWVzc2FnZScpO1xuICAgICAgICAgICAgaWYgKCEkbWVzc2FnZURpdi5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAkbWVzc2FnZURpdiA9ICQoJzxkaXYgaWQ9XCJkaXNwbGF5LW1lc3NhZ2VcIiBzdHlsZT1cIm1hcmdpbjoxZW07cGFkZGluZzowLjVlbSAyLjUlO2JvcmRlcjpzb2xpZCAxcHggI2RkZDtiYWNrZ3JvdW5kLWNvbG9yOiNmY2ZjZmM7Zm9udC1zaXplOiAwLjhlbVwiPjwvZGl2PicpO1xuICAgICAgICAgICAgICAgIGlmIChtdy51dGlsLiRjb250ZW50Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBtdy51dGlsLiRjb250ZW50LnByZXBlbmQoJG1lc3NhZ2VEaXYpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2xhc3NOYW1lKSAkbWVzc2FnZURpdi5wcm9wKCdjbGFzcycsICdkaXNwbGF5LW1lc3NhZ2UtJyArIGNsYXNzTmFtZSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgJG1lc3NhZ2VEaXYuZW1wdHkoKTtcbiAgICAgICAgICAgICAgICAkbWVzc2FnZURpdi5hcHBlbmQobWVzc2FnZSk7XG4gICAgICAgICAgICB9IGVsc2UgJG1lc3NhZ2VEaXYuaHRtbChtZXNzYWdlKTtcbiAgICAgICAgICAgICRtZXNzYWdlRGl2WzBdLnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVzY2FwZXMgYSBzdHJpbmcgZm9yIHVzZSBpbiBqUXVlcnkgc2VsZWN0b3JzXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJlc3Npb24gdGhlIGV4cHJlc3Npb24gdG8gZXNjYXBlXG4gICAgICogQHJldHVybnMge3N0cmluZ30gdGhlIGVzY2FwZWQgZXhwcmVzc2lvblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGpxRXNjYXBlKGV4cHJlc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIGV4cHJlc3Npb24ucmVwbGFjZSgvWyFcIiMkJSYnKCkqKywuLzo7PD0+P0BbXFxcXFxcXV5ge3x9fiBdL2csICcnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFZGl0cyBhIGdpdmVuIHBhZ2UsIGFuZCB1cGRhdGVzIHRoZSBVSVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSB0aGUgcGFnZSB0aXRsZSB0byBlZGl0XG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5ld1RleHQgdGhlIG5ldyB0ZXh0IHRvIGluc2VydFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdW1tYXJ5IHRoZSBlZGl0IHN1bW1hcnlcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGNyZWF0ZU9ubHkgd2hldGhlciB0byBvbmx5IGNyZWF0ZSB0aGUgcGFnZSBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICogQHBhcmFtIHtib29sZWFufSBub1BhdHJvbCB3aGV0aGVyIHRvIG5vdCBtYXJrIHRoZSBlZGl0IGFzIHBhdHJvbGxlZFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGVkaXRQYWdlKHRpdGxlLCBuZXdUZXh0LCBzdW1tYXJ5LCBjcmVhdGVPbmx5LCBub1BhdHJvbCkge1xuICAgICAgICBjb25zdCB3Z0FydGljbGVQYXRoID0gbXcuY29uZmlnLmdldCgnd2dBcnRpY2xlUGF0aCcpO1xuICAgICAgICBzdW1tYXJ5ICs9IHN1bW1hcnlBZHZlcnQ7XG4gICAgICAgICQoJyNhZmNIZWxwZXJfZmluaXNoZWRfd3JhcHBlcicpLmh0bWwoJzxzcGFuIGlkPVwiYWZjSGVscGVyX0FKQVhfZmluaXNoZWRfJyArIGFqYXhOdW1iZXIgKyAnXCIgc3R5bGU9XCJkaXNwbGF5Om5vbmVcIj4nICsgJCgnI2FmY0hlbHBlcl9maW5pc2hlZF93cmFwcGVyJykuaHRtbCgpICsgJzwvc3Bhbj4nKTtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25JZCA9IGFqYXhOdW1iZXI7XG4gICAgICAgIGFqYXhOdW1iZXIrKztcbiAgICAgICAgJCgnI2FmY0hlbHBlcl9zdGF0dXMnKS5odG1sKFxuICAgICAgICAgICAgJCgnI2FmY0hlbHBlcl9zdGF0dXMnKS5odG1sKCkgK1xuICAgICAgICAgICAgICAgICc8bGkgaWQ9XCJhZmNIZWxwZXJfZWRpdCcgK1xuICAgICAgICAgICAgICAgIGpxRXNjYXBlKHRpdGxlKSArXG4gICAgICAgICAgICAgICAgJ1wiPkVkaXRpbmcgPGEgaHJlZj1cIicgK1xuICAgICAgICAgICAgICAgIHdnQXJ0aWNsZVBhdGgucmVwbGFjZSgnJDEnLCBlbmNvZGVVUkkodGl0bGUpKSArXG4gICAgICAgICAgICAgICAgJ1wiIHRpdGxlPVwiJyArXG4gICAgICAgICAgICAgICAgdGl0bGUgK1xuICAgICAgICAgICAgICAgICdcIj4nICtcbiAgICAgICAgICAgICAgICB0aXRsZSArXG4gICAgICAgICAgICAgICAgJzwvYT48L2xpPicsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgICAgICBhY3Rpb246ICdlZGl0JyxcbiAgICAgICAgICAgIHRpdGxlLFxuICAgICAgICAgICAgdGV4dDogbmV3VGV4dCxcbiAgICAgICAgICAgIHN1bW1hcnksXG4gICAgICAgIH07XG4gICAgICAgIGlmIChjcmVhdGVPbmx5KSByZXF1ZXN0LmNyZWF0ZW9ubHkgPSB0cnVlO1xuXG4gICAgICAgIGNvbnN0IGFwaSA9IG5ldyBtdy5BcGkoKTtcbiAgICAgICAgYXBpLnBvc3RXaXRoRWRpdFRva2VuKHJlcXVlc3QpXG4gICAgICAgICAgICAuZG9uZSgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEuZWRpdCAmJiBkYXRhLmVkaXQucmVzdWx0ICYmIGRhdGEuZWRpdC5yZXN1bHQgPT09ICdTdWNjZXNzJykge1xuICAgICAgICAgICAgICAgICAgICAkKCcjYWZjSGVscGVyX2VkaXQnICsganFFc2NhcGUodGl0bGUpKS5odG1sKCdTYXZlZCA8YSBocmVmPVwiJyArIHdnQXJ0aWNsZVBhdGgucmVwbGFjZSgnJDEnLCBlbmNvZGVVUkkodGl0bGUpKSArICdcIiB0aXRsZT1cIicgKyB0aXRsZSArICdcIj4nICsgdGl0bGUgKyAnPC9hPicpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICQoJyNhZmNIZWxwZXJfZWRpdCcgKyBqcUVzY2FwZSh0aXRsZSkpLmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAnPHNwYW4gY2xhc3M9XCJhZmNIZWxwZXJfbm90aWNlXCI+PGI+RWRpdCBmYWlsZWQgb24gPGEgaHJlZj1cIicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdnQXJ0aWNsZVBhdGgucmVwbGFjZSgnJDEnLCBlbmNvZGVVUkkodGl0bGUpKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1wiIHRpdGxlPVwiJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcIj4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwvYT48L2I+PC9zcGFuPi4gRXJyb3IgaW5mbzogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoZGF0YSksXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0VkaXQgZmFpbGVkIG9uICVzICglcykuIEVycm9yIGluZm86ICVzJywgd2dBcnRpY2xlUGF0aC5yZXBsYWNlKCckMScsIGVuY29kZVVSSSh0aXRsZSkpLCB0aXRsZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZmFpbCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY3JlYXRlT25seSAmJiBlcnJvciA9PT0gJ2FydGljbGVleGlzdHMnKVxuICAgICAgICAgICAgICAgICAgICAkKCcjYWZjSGVscGVyX2VkaXQnICsganFFc2NhcGUodGl0bGUpKS5odG1sKFxuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiYWZjSGVscGVyX25vdGljZVwiPjxiPkVkaXQgZmFpbGVkIG9uIDxhIGhyZWY9XCInICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Z0FydGljbGVQYXRoLnJlcGxhY2UoJyQxJywgZW5jb2RlVVJJKHRpdGxlKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcIiB0aXRsZT1cIicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2E+PC9iPjwvc3Bhbj4uIEVycm9yIGluZm86IFRoZSBhcnRpY2xlIGFscmVhZHkgZXhpc3RzIScsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAkKCcjYWZjSGVscGVyX2VkaXQnICsganFFc2NhcGUodGl0bGUpKS5odG1sKFxuICAgICAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPVwiYWZjSGVscGVyX25vdGljZVwiPjxiPkVkaXQgZmFpbGVkIG9uIDxhIGhyZWY9XCInICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Z0FydGljbGVQYXRoLnJlcGxhY2UoJyQxJywgZW5jb2RlVVJJKHRpdGxlKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdcIiB0aXRsZT1cIicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8L2E+PC9iPjwvc3Bhbj4uIEVycm9yIGluZm86ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hbHdheXMoKCkgPT4ge1xuICAgICAgICAgICAgICAgICQoJyNhZmNIZWxwZXJfQUpBWF9maW5pc2hlZF8nICsgZnVuY3Rpb25JZCkuY3NzKCdkaXNwbGF5JywgJycpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKCFub1BhdHJvbCkge1xuICAgICAgICAgICAgLyogV2UgcGF0cm9sIGJ5IGRlZmF1bHQgKi9cbiAgICAgICAgICAgIGlmICgkKCcucGF0cm9sbGluaycpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIC8vIEV4dHJhY3QgdGhlIHJjaWQgdG9rZW4gZnJvbSB0aGUgXCJNYXJrIHBhZ2UgYXMgcGF0cm9sbGVkXCIgbGluayBvbiBwYWdlXG4gICAgICAgICAgICAgICAgY29uc3QgcGF0cm9sSHJlZiA9ICQoJy5wYXRyb2xsaW5rIGEnKS5hdHRyKCdocmVmJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmNJZCA9IG13LnV0aWwuZ2V0UGFyYW1WYWx1ZSgncmNpZCcsIHBhdHJvbEhyZWYpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHJjSWQpIHtcbiAgICAgICAgICAgICAgICAgICAgJCgnI2FmY0hlbHBlcl9zdGF0dXMnKS5odG1sKFxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2FmY0hlbHBlcl9zdGF0dXMnKS5odG1sKCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8bGkgaWQ9XCJhZmNIZWxwZXJfcGF0cm9sJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganFFc2NhcGUodGl0bGUpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCI+TWFya2luZyA8YSBocmVmPVwiJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2dBcnRpY2xlUGF0aC5yZXBsYWNlKCckMScsIGVuY29kZVVSSSh0aXRsZSkpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCIgdGl0bGU9XCInICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1wiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnIGFzIHBhdHJvbGxlZDwvYT48L2xpPicsXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdHJvbFJlcXVlc3QgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICdwYXRyb2wnLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAnanNvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICByY2lkOiByY0lkLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBhcGkucG9zdFdpdGhUb2tlbigncGF0cm9sJywgcGF0cm9sUmVxdWVzdClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5kb25lKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2FmY0hlbHBlcl9wYXRyb2wnICsganFFc2NhcGUodGl0bGUpKS5odG1sKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ01hcmtlZCA8YSBocmVmPVwiJyArIHdnQXJ0aWNsZVBhdGgucmVwbGFjZSgnJDEnLCBlbmNvZGVVUkkodGl0bGUpKSArICdcIiB0aXRsZT1cIicgKyB0aXRsZSArICdcIj4nICsgdGl0bGUgKyAnPC9hPiBhcyBwYXRyb2xsZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJyNhZmNIZWxwZXJfcGF0cm9sJyArIGpxRXNjYXBlKHRpdGxlKSkuaHRtbChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImFmY0hlbHBlcl9ub3RpY2VcIj48Yj5QYXRyb2xsaW5nIGZhaWxlZCBvbiA8YSBocmVmPVwiJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2dBcnRpY2xlUGF0aC5yZXBsYWNlKCckMScsIGVuY29kZVVSSSh0aXRsZSkpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCIgdGl0bGU9XCInICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1wiPicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9hPjwvYj48L3NwYW4+IHdpdGggYW4gdW5rbm93biBlcnJvcicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BhdHJvbGxpbmcgZmFpbGVkIG9uICVzICglcykgd2l0aCBhbiB1bmtub3duIGVycm9yLicsIHdnQXJ0aWNsZVBhdGgucmVwbGFjZSgnJDEnLCBlbmNvZGVVUkkodGl0bGUpKSwgdGl0bGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmFpbCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcjYWZjSGVscGVyX3BhdHJvbCcgKyBqcUVzY2FwZSh0aXRsZSkpLmh0bWwoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBjbGFzcz1cImFmY0hlbHBlcl9ub3RpY2VcIj48Yj5QYXRyb2xsaW5nIGZhaWxlZCBvbiA8YSBocmVmPVwiJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Z0FydGljbGVQYXRoLnJlcGxhY2UoJyQxJywgZW5jb2RlVVJJKHRpdGxlKSkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1wiIHRpdGxlPVwiJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnXCI+JyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPC9hPjwvYj48L3NwYW4+LiBFcnJvciBpbmZvOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBtdy5sb2FkZXIudXNpbmcoWydtZWRpYXdpa2kuYXBpJywgJ21lZGlhd2lraS51dGlsJ10sICgpID0+IHtcbiAgICAgICAgbXcudXRpbC5hZGRDU1MoYFxuI2Rpc3BsYXktbWVzc2FnZSAqIHtcbiAgICBtYXJnaW46IHJldmVydDtcbiAgICBib3JkZXI6IHJldmVydDtcbiAgICBiYWNrZ3JvdW5kOiByZXZlcnQ7XG4gICAgcGFkZGluZzogcmV2ZXJ0O1xufWApO1xuXG4gICAgICAgIGNvbnN0IHJlZGlyZWN0UG9ydGxldExpbmsgPSBtdy51dGlsLmFkZFBvcnRsZXRMaW5rKG13LmNvbmZpZy5nZXQoJ3NraW4nKSA9PT0gJ21pbmVydmEnID8gJ3AtdGInIDogJ3AtY2FjdGlvbnMnLCAnIycsICdSZXZpZXcgQUZDL1JDJywgJ2NhLWFmY3JocycsICdSZXZpZXcnLCAnYScpO1xuICAgICAgICAkKHJlZGlyZWN0UG9ydGxldExpbmspLmNsaWNrKChldmVudCkgPT4ge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIC8vIENsZWFyIHZhcmlhYmxlcyBmb3IgdGhlIGNhc2Ugc29tZWJvZHkgaXMgY2xpY2tpbmcgb24gXCJyZXZpZXdcIiBtdWx0aXBsZSB0aW1lc1xuICAgICAgICAgICAgcmVkaXJlY3RTdWJtaXNzaW9ucy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgcmVkaXJlY3RTZWN0aW9ucy5sZW5ndGggPSAwO1xuICAgICAgICAgICAgbnVtVG90YWwgPSAwO1xuICAgICAgICAgICAgc3VibWlzc2lvbnMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIG5lZWRzVXBkYXRlLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICByZWRpcmVjdEluaXQoKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KSgpO1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7O2NBQUMsVUFBWSxDQUNULEdBQUksR0FBRyxPQUFPLElBQUksWUFBWSxJQUFNLDZDQUErQyxHQUFHLE9BQU8sSUFBSSxZQUFZLElBQU0sNkNBQThDLE9BRWpLLE1BQU1BLEVBQW1CLEdBQUcsT0FBTyxJQUFJLFlBQVksRUFBRSxRQUFRLEtBQU0sR0FBRyxFQUNoRUMsRUFBc0IsQ0FBQyxFQUM3QixJQUFJQyxFQUFtQixDQUFDLEVBQ3hCLE1BQU1DLEVBQWdCLDhDQUN0QixJQUFJQyxFQUFXLEVBQ1hDLEVBQWEsRUFDakIsTUFBTUMsRUFBYyxDQUFDLEVBQ2ZDLEVBQWMsQ0FBQyxFQUNmQyxFQUF5QixDQUMzQixPQUFRLHNEQUNSLE1BQU8scUNBQ1AsWUFBYSxpSkFDYixTQUFVLHdIQUNWLGVBQWdCLHlDQUNoQixPQUFRLEVBQ1osRUFDTUMsRUFBeUIsQ0FDM0IsT0FBUSx5REFDUixNQUFPLHFDQUNQLFNBQVUseUVBQ1YsZUFBZ0IseUNBQ2hCLE9BQVEsRUFDWixFQUtBLGVBQWVDLEdBQWUsQ0FDMUIsSUFBSUMsRUFBVyxNQUFNQyxFQUFZWixDQUFnQixFQUVqRFcsRUFBV0UsRUFBYUYsQ0FBUSxFQUdoQyxNQUFNRyxFQUFlLFVBQ3JCSCxFQUFX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LEVBQzFCRSxFQUFXLEVBQ1hFLEVBQVksT0FBUyxFQUNyQkMsRUFBWSxPQUFTLEVBQ3JCRyxFQUFhLENBQ2pCLENBQUMsQ0FDTCxDQUFDLENBQ0wsR0FBRyIsCiAgIm5hbWVzIjogWyJyZWRpcmVjdFBhZ2VOYW1lIiwgInJlZGlyZWN0U3VibWlzc2lvbnMiLCAicmVkaXJlY3RTZWN0aW9ucyIsICJzdW1tYXJ5QWR2ZXJ0IiwgIm51bVRvdGFsIiwgImFqYXhOdW1iZXIiLCAic3VibWlzc2lvbnMiLCAibmVlZHNVcGRhdGUiLCAicmVkaXJlY3REZWNsaW5lUmVhc29ucyIsICJjYXRlZ29yeURlY2xpbmVSZWFzb25zIiwgInJlZGlyZWN0SW5pdCIsICJwYWdlVGV4dCIsICJnZXRQYWdlVGV4dCIsICJjbGVhbnVwTGlua3MiLCAic2VjdGlvblJlZ2V4IiwgImkiLCAiaGVhZGVyIiwgIndpa2lsaW5rUmVnZXgiLCAibGlua3MiLCAibCIsICJ0byIsICJyZWFzb25NYXRjaCIsICJyZWFzb24iLCAic291cmNlTWF0Y2giLCAic291cmNlIiwgInN1Ym1pc3Npb24iLCAiaiIsICJzdWIiLCAiY2F0ZWdvcnlOYW1lIiwgInJlcXVlc3RUZXh0IiwgInBhcmVudEhlYWRpbmdJbmRleCIsICJwYXJlbnRDYXRlZ29yaWVzIiwgInBhcmVudENhdGVnb3J5TWF0Y2giLCAicGFyZW50Q2F0ZWdvcmllc1JlZ2V4IiwgIiRmb3JtIiwgImRpc3BsYXlNZXNzYWdlIiwgIiRtZXNzYWdlRGl2IiwgInJlZGlyZWN0RW1wdHkiLCAiQUNUSU9OUyIsICJrIiwgInN1Ym1pc3Npb25OYW1lIiwgIiR0aGlzU3ViTGlzdCIsICIkdGhpc1N1Ykxpc3RFbGVtZW50IiwgIiRmcm9tTGlzdCIsICJmcm9tIiwgInRvQXJ0aWNsZSIsICJyZWFzb25BbmRTb3VyY2UiLCAiZ29vZ2xlU2VhcmNoVXJsIiwgImdlbmVyYXRlU2VsZWN0T2JqZWN0IiwgInJlZGlyZWN0TWFrZUFjdGlvbkNoYW5nZSIsICJzdWJJZCIsICJyZWRpcmVjdFBlcmZvcm1BY3Rpb25zIiwgInkiLCAicmVkaXJlY3RPbkFjdGlvbkNoYW5nZSIsICJpZCIsICIkZXh0cmEiLCAic2VsZWN0VmFsdWUiLCAiZ2VuZXJhdGVTZWxlY3QiLCAiYWN0aW9uIiwgImFkZFN0YXR1cyIsICJzdGF0dXMiLCAidG90YWxBY2NlcHQiLCAidG90YWxEZWNsaW5lIiwgInRvdGFsQ29tbWVudCIsICJ0ZXh0IiwgInN0YXJ0SW5kZXgiLCAiZW5kSW5kZXgiLCAiY2F0ZWdvcnlUZXh0IiwgImNhdCIsICJlZGl0UGFnZSIsICJ0YWxrVGV4dCIsICJ0YWxrVGl0bGUiLCAiYWNjZXB0Q29tbWVudCIsICJkZWNsaW5lQ29tbWVudCIsICJvdGhlckNvbW1lbnQiLCAiYWNjZXB0Q291bnQiLCAiZGVjbGluZUNvdW50IiwgImNvbW1lbnRDb3VudCIsICJoYXNDb21tZW50IiwgInJlZGlyZWN0IiwgInJlZGlyZWN0VGV4dCIsICJtd1RpdGxlIiwgIm13VGFsa1RpdGxlIiwgInN1bW1hcnkiLCAidGl0bGUiLCAianFFc2NhcGUiLCAicmVzcG9uc2UiLCAicGFnZUlkIiwgIm5ld1RleHQiLCAidGVtcFRleHQiLCAibWF0Y2giLCAicGFnZU5hbWUiLCAiZGlzcGxheW5hbWUiLCAicmVwbGFjZVRleHQiLCAib3B0aW9ucyIsICJvbmNoYW5nZSIsICIkc2VsZWN0IiwgIm9wdGlvbiIsICIkb3B0aW9uIiwgIm1lc3NhZ2UiLCAiY2xhc3NOYW1lIiwgImV4cHJlc3Npb24iLCAiY3JlYXRlT25seSIsICJub1BhdHJvbCIsICJ3Z0FydGljbGVQYXRoIiwgImZ1bmN0aW9uSWQiLCAicmVxdWVzdCIsICJhcGkiLCAiZGF0YSIsICJlcnJvciIsICJwYXRyb2xIcmVmIiwgInJjSWQiLCAicGF0cm9sUmVxdWVzdCIsICJyZWRpcmVjdFBvcnRsZXRMaW5rIiwgImV2ZW50Il0KfQo=