@willbooster/agent-skills 1.18.1 → 1.18.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +2 -2
- package/package.json +1 -1
- package/skills/wbfy/SKILL.md +4 -3
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import{Command as n,Option as e}from"commander";import{spawn as t,spawnSync as r}from"node:child_process";import{createWriteStream as i}from"node:fs";import{mkdir as a}from"node:fs/promises";import{dirname as o}from"node:path";import{stdin as u,stderr as c}from"node:process";import{setTimeout as s}from"node:timers/promises";import{stripVTControlCharacters as l}from"node:util";import{stringify as f}from"yaml";import{fileURLToPath as p}from"node:url";function d(n,e){(null==e||e>n.length)&&(e=n.length);for(var t=0,r=Array(e);t<e;t++)r[t]=n[t];return r}function h(n){var e,t,r,i=2;for("undefined"!=typeof Symbol&&(t=Symbol.asyncIterator,r=Symbol.iterator);i--;){if(t&&null!=(e=n[t]))return e.call(n);if(r&&null!=(e=n[r]))return new m(e.call(n));t="@@asyncIterator",r="@@iterator"}throw new TypeError("Object is not async iterable")}function m(n){function e(n){if(Object(n)!==n)return Promise.reject(new TypeError(n+" is not an object."));var e=n.done;return Promise.resolve(n.value).then(function(n){return{value:n,done:e}})}return m=function(n){this.s=n,this.n=n.next},m.prototype={s:null,n:null,next:function(){return e(this.n.apply(this.s,arguments))},return:function(n){var t=this.s.return;return void 0===t?Promise.resolve({value:n,done:!0}):e(t.apply(this.s,arguments))},throw:function(n){var t=this.s.return;return void 0===t?Promise.reject(n):e(t.apply(this.s,arguments))}},new m(n)}function v(n,e,t,r,i,a,o){try{var u=n[a](o),c=u.value}catch(n){return void t(n)}u.done?e(c):Promise.resolve(c).then(r,i)}function g(n){return function(){var e=this,t=arguments;return new Promise(function(r,i){var a=n.apply(e,t);function o(n){v(a,r,i,o,u,"next",n)}function u(n){v(a,r,i,o,u,"throw",n)}o(void 0)})}}function w(n,e){var t="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(!t){if(Array.isArray(n)||(t=A(n))||e){t&&(n=t);var r=0,i=function(){};return{s:i,n:function(){return r>=n.length?{done:!0}:{done:!1,value:n[r++]}},e:function(n){throw n},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,u=!1;return{s:function(){t=t.call(n)},n:function(){var n=t.next();return o=n.done,n},e:function(n){u=!0,a=n},f:function(){try{o||null==t.return||t.return()}finally{if(u)throw a}}}}function y(n,e,t){return(e=function(n){var e=function(n,e){if("object"!=typeof n||!n)return n;var t=n[Symbol.toPrimitive];if(void 0!==t){var r=t.call(n,e);if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(n)}(n,"string");return"symbol"==typeof e?e:e+""}(e))in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function b(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})),t.push.apply(t,r)}return t}function k(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?b(Object(t),!0).forEach(function(e){y(n,e,t[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):b(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))})}return n}function x(){
|
|
3
3
|
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
|
|
4
|
-
var n,e,t="function"==typeof Symbol?Symbol:{},r=t.iterator||"@@iterator",i=t.toStringTag||"@@toStringTag";function a(t,r,i,a){var c=r&&r.prototype instanceof u?r:u,s=Object.create(c.prototype);return I(s,"_invoke",function(t,r,i){var a,u,c,s=0,l=i||[],f=!1,p={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,t){return a=e,u=0,c=n,p.n=t,o}};function d(t,r){for(u=t,c=r,e=0;!f&&s&&!i&&e<l.length;e++){var i,a=l[e],d=p.p,h=a[2];t>3?(i=h===r)&&(c=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=n):a[0]<=d&&((i=t<2&&d<a[1])?(u=0,p.v=r,p.n=a[1]):d<h&&(i=t<3||a[0]>r||r>h)&&(a[4]=t,a[5]=r,p.n=h,u=0))}if(i||t>1)return o;throw f=!0,r}return function(i,l,h){if(s>1)throw TypeError("Generator is already running");for(f&&1===l&&d(l,h),u=l,c=h;(e=u<2?n:c)||!f;){a||(u?u<3?(u>1&&(p.n=-1),d(u,c)):p.n=c:p.v=c);try{if(s=2,a){if(u||(i="next"),e=a[i]){if(!(e=e.call(a,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,u<2&&(u=0)}else 1===u&&(e=a.return)&&e.call(a),u<2&&(c=TypeError("The iterator does not provide a '"+i+"' method"),u=1);a=n}else if((e=(f=p.n<0)?c:t.call(r,p))!==o)break}catch(e){a=n,u=1,c=e}finally{s=1}}return{value:e,done:f}}}(t,i,a),!0),s}var o={};function u(){}function c(){}function s(){}e=Object.getPrototypeOf;var l=[][r]?e(e([][r]())):(I(e={},r,function(){return this}),e),f=s.prototype=u.prototype=Object.create(l);function p(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,s):(n.__proto__=s,I(n,i,"GeneratorFunction")),n.prototype=Object.create(f),n}return c.prototype=s,I(f,"constructor",s),I(s,"constructor",c),c.displayName="GeneratorFunction",I(s,i,"GeneratorFunction"),I(f),I(f,i,"Generator"),I(f,r,function(){return this}),I(f,"toString",function(){return"[object Generator]"}),(x=function(){return{w:a,m:p}})()}function I(n,e,t,r){var i=Object.defineProperty;try{i({},"",{})}catch(n){i=0}I=function(n,e,t,r){function a(e,t){I(n,e,function(n){return this._invoke(e,t,n)})}e?i?i(n,e,{value:t,enumerable:!r,configurable:!r,writable:!r}):n[e]=t:(a("next",0),a("throw",1),a("return",2))},I(n,e,t,r)}function S(n){if(null!=n){var e=n["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],t=0;if(e)return e.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length))return{next:function(){return n&&t>=n.length&&(n=void 0),{value:n&&n[t++],done:!n}}}}throw new TypeError(typeof n+" is not iterable")}function j(n,e){return function(n){if(Array.isArray(n))return n}(n)||function(n,e){var t=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=t){var r,i,a,o,u=[],c=!0,s=!1;try{if(a=(t=t.call(n)).next,0===e){if(Object(t)!==t)return;c=!1}else for(;!(c=(r=a.call(t)).done)&&(u.push(r.value),u.length!==e);c=!0);}catch(n){s=!0,i=n}finally{try{if(!c&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(s)throw i}}return u}}(n,e)||A(n,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function O(n){return function(n){if(Array.isArray(n))return d(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||A(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function R(n){"@babel/helpers - typeof";return R="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},R(n)}function A(n,e){if(n){if("string"==typeof n)return d(n,e);var t={}.toString.call(n).slice(8,-1);return"Object"===t&&n.constructor&&(t=n.constructor.name),"Map"===t||"Set"===t?Array.from(n):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?d(n,e):void 0}}var C=["SIGINT","SIGTERM","SIGHUP"],$=new Set,P=!1;function q(n,e){return E.apply(this,arguments)}function E(){return E=g(x().m(function n(e,r){var i,a,o,u,c,s,l,f,p,d,h;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===r&&(r={}),a=t(null!=(i=e[0])?i:"",e.slice(1),{detached:!0,stdio:["ignore","pipe","pipe"]}),o=T(a,r.timeoutMs),u=G(r.waitMessage,r.waitIntervalSeconds),n.n=1,M(r.logFilePath);case 1:return c=n.v,n.p=2,n.n=3,Promise.all([_(a.stdout,function(n){return c.write(n)}),_(a.stderr,function(n){return c.write(n)}),new Promise(function(n,e){a.once("error",e),a.once("close",function(e){return n(null!=e?e:1)})})]);case 3:if(s=n.v,l=j(s,3),f=l[0],p=l[1],d=l[2],!o.timedOut()){n.n=4;break}throw new Error(N("".concat(f).concat(p),o.timeoutMs,e));case 4:if(0!==d){n.n=5;break}return n.a(2,f);case 5:throw h="".concat(f).concat(p),new Error(h||"Command failed: ".concat(e.join(" ")));case 6:return n.p=6,n.n=7,c.close();case 7:return o.clear(),u(),n.f(6);case 8:return n.a(2)}},n,null,[[2,,6,8]])})),E.apply(this,arguments)}function N(n,e,t){var r="Command timed out after ".concat(function(n){if(n%36e5==0)return"".concat(n/36e5,"h");if(n%6e4==0)return"".concat(n/6e4,"m");if(n%1e3==0)return"".concat(n/1e3,"s");return"".concat(n,"ms")}(e),": ").concat(t.join(" "));return n.length>0?"".concat(n,"\n").concat(r):r}function T(n,e){void 0===e&&(e=36e5);var t,r=!1;$.add(n),function(){if(P)return;P=!0;var n,e=w(C);try{var t=function(){var e=n.value;process.once(e,function(){var n,t=w($);try{for(t.s();!(n=t.n()).done;){L(n.value,e)}}catch(n){t.e(n)}finally{t.f()}process.exit(128+function(n){switch(n){case"SIGINT":return 2;case"SIGTERM":return 15;case"SIGHUP":return 1}}(e))})};for(e.s();!(n=e.n()).done;)t()}catch(n){e.e(n)}finally{e.f()}}();var i=setTimeout(function(){r=!0,L(n,"SIGTERM"),(t=setTimeout(function(){return L(n,"SIGKILL")},5e3)).unref()},e);return i.unref(),{clear:function(){clearTimeout(i),t&&clearTimeout(t),$.delete(n)},timedOut:function(){return r},timeoutMs:e}}function L(n,e){if(n.pid&&n.pid>0)try{return void process.kill(-n.pid,e)}catch(n){}n.kill(e)}function _(n,e){return D.apply(this,arguments)}function D(){return(D=g(x().m(function n(e,t){var r,i,a,o,u,c,s,l,f,p,d;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:r=[],i=new TextDecoder,a=!1,o=!1,n.p=2,c=h(e);case 3:return n.n=4,c.next();case 4:if(!(a=!(s=n.v).done)){n.n=6;break}l=s.value,f="string"==typeof l?l:i.decode(new Uint8Array(l),{stream:!0}),r.push(f),null==t||t(f);case 5:a=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,d=n.v,o=!0,u=d;case 8:if(n.p=8,n.p=9,!a||null==c.return){n.n=10;break}return n.n=10,c.return();case 10:if(n.p=10,!o){n.n=11;break}throw u;case 11:return n.f(10);case 12:return n.f(8);case 13:return(p=i.decode())&&(r.push(p),null==t||t(p)),n.a(2,r.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function G(n,e,t){if(void 0===e&&(e=36),void 0===t&&(t=function(n){return process.stderr.write(n)}),!n)return function(){};var r=0,i=setInterval(function(){t("."),(r+=1)<=100&&r%5==0&&t(" ".concat(r,"% done "))},1e3*e);return t("".concat(n," ").concat("This can take up to 1 hour; dots indicate progress",": ")),function(){clearInterval(i),t("\n")}}function M(n){return U.apply(this,arguments)}function U(){return U=g(x().m(function n(e){var t,r,u;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,{write:function(){},close:function(){var n=g(x().m(function n(){return x().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()});case 1:return t=function(n){process.stderr.write("Warning: Failed to write command log to ".concat(e,": ").concat(String(n),"\n"))},n.p=2,n.n=3,a(o(e),{recursive:!0});case 3:return(r=i(e,{flags:"w"})).on("error",t),n.a(2,{write:function(n){r.writable&&r.write(n)},close:function(){var n=g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,new Promise(function(n){r.end(function(){return n()})});case 1:return n.a(2,n.v)}},n)}));return function(){return n.apply(this,arguments)}}()});case 4:return n.p=4,u=n.v,t(u),n.a(2,{write:function(){},close:function(){var n=g(x().m(function n(){return x().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()})}},n,null,[[2,4]])})),U.apply(this,arguments)}var F="There is no concern.",H=["codex","claude","gemini"],W=new RegExp("\\b".concat("there is no concern","\\b"),"i");function J(n,e){return B.apply(this,arguments)}function B(){return(B=g(x().m(function n(e,t){var r,i,a;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t={allAgentsLabel:"agents"}),n.n=1,e;case 1:return r=n.v,i=G(Z(t.allAgentsLabel)),n.p=2,n.n=3,Promise.all(H.map(g(x().m(function n(e){var i,a,o,u;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Q(e,r,{waitMessage:!1});case 1:return u=n.v.trim(),n.a(2,null!=(i=null==(a=(o=t).mapOutput)?void 0:a.call(o,e,u))?i:"## ".concat(K(e),"\n\n").concat(u))}},n)}))));case 3:return a=n.v.filter(function(n){return void 0!==n}),n.a(2,a.length>0?a.join("\n\n"):F);case 4:return n.p=4,i(),n.f(4);case 5:return n.a(2)}},n,null,[[2,,4,5]])}))).apply(this,arguments)}function Q(n,e,t){return Y.apply(this,arguments)}function Y(){return(Y=g(x().m(function n(e,t,r){var i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:return void 0===r&&(r={}),i=q,a=z,o=e,n.n=1,t;case 1:return n.a(2,i(a(o,n.v),{logFilePath:V(e),waitMessage:void 0===r.waitMessage?Z(K(e)):r.waitMessage}))}},n)}))).apply(this,arguments)}function z(n,e){switch(n){case"codex":return["npx","--yes","@openai/codex@latest","exec","--dangerously-bypass-approvals-and-sandbox",e];case"claude":return["claude","--dangerously-skip-permissions","-p",e];case"gemini":return["npx","--yes","@google/gemini-cli@preview","--approval-mode","yolo","--model","gemini-3.1-pro-preview","-p",e]}}function K(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function Z(n){return"Waiting for ".concat(n," to finish.")}function V(n){return"logs/".concat(n,"-").concat((e=new Date,t=j([e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()].map(X),5),r=t[0],i=t[1],a=t[2],o=t[3],u=t[4],"".concat(r).concat(i,"-").concat(a).concat(o).concat(u)),".log");var e,t,r,i,a,o,u}function X(n){return n.toString().padStart(2,"0")}var nn={blockQuote:"literal",lineWidth:0};function en(n){c.write("".concat(n,"\n"))}function tn(n,e){void 0===e&&(e=1),c.write("".concat(n,"\n")),process.exit(e)}function rn(){return an.apply(this,arguments)}function an(){return(an=g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:if(!u.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,_(u);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function on(n){return un.apply(this,arguments)}function un(){return(un=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return void 0===e&&(e="Error: input is required on stdin"),n.n=1,rn();case 1:if(!((t=n.v).length>0)){n.n=2;break}return n.a(2,t);case 2:tn(e,2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function cn(n,e){return sn.apply(this,arguments)}function sn(){return sn=g(x().m(function n(e,r){var i,a,o,u,c;return x().w(function(n){for(;;)switch(n.n){case 0:void 0===r&&(r={}),a=null!=(i=r.allowedExitCodes)?i:[],o=x().m(function n(){var i,o,u,l,f,p,d,h,m,v,g;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return o=t(null!=(i=e[0])?i:"",e.slice(1),{detached:!0,stdio:["pipe","pipe","pipe"]}),l=!1,f=T(o),n.p=1,void 0!==r.stdinData?o.stdin.end(r.stdinData):o.stdin.end(),n.n=2,Promise.all([_(o.stdout),_(o.stderr),new Promise(function(n,e){o.once("error",e),o.once("close",function(e){return n(null!=e?e:1)})})]);case 2:if(p=n.v,d=j(p,3),h=d[0],m=d[1],v=d[2],g="".concat(h).concat(m),!f.timedOut()){n.n=3;break}u=N(g,f.timeoutMs,e),n.n=5;break;case 3:if(0!==v&&!a.includes(v)){n.n=4;break}return n.a(2,{v:g});case 4:In(e,v,g)&&c<3?l=!0:u=g||"Command failed: ".concat(e.join(" "));case 5:return n.p=5,f.clear(),n.f(5);case 6:if(!l){n.n=8;break}return en("Transient GitHub CLI failure; retrying... (attempt ".concat(c," of ").concat(2,")")),n.n=7,s(1e3*c);case 7:return n.a(2,0);case 8:u&&tn(u);case 9:return n.a(2)}},n,null,[[1,,5,6]])}),c=1;case 1:if(!(c<=3)){n.n=5;break}return n.d(S(o()),2);case 2:if(0!==(u=n.v)){n.n=3;break}return n.a(3,4);case 3:if(!u){n.n=4;break}return n.a(2,u.v);case 4:c+=1,n.n=1;break;case 5:tn("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),sn.apply(this,arguments)}function ln(n,e){return fn.apply(this,arguments)}function fn(){return(fn=g(x().m(function n(e,t){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,cn(["gh"].concat(O(e)),{stdinData:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function pn(n,e,t){return dn.apply(this,arguments)}function dn(){return(dn=g(x().m(function n(e,t,r){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,cn(["gh"].concat(O(e)),{stdinData:r,allowedExitCodes:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function hn(){return mn.apply(this,arguments)}function mn(){return(mn=g(x().m(function n(){var e,t,r,i,a;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v.trim(),t=e.split("/",2),r=j(t,2),i=r[0],a=r[1],i&&a||tn("Error: could not determine current repository"),n.a(2,[i,a])}},n)}))).apply(this,arguments)}function vn(){return gn.apply(this,arguments)}function gn(){return(gn=g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln(["pr","view","--json","number","--jq",".number"]);case 1:return n.a(2,n.v.trim())}},n)}))).apply(this,arguments)}function wn(n,e){return yn.apply(this,arguments)}function yn(){return(yn=g(x().m(function n(e,t){var r,i,a,o,u,c,s,l,f;return x().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),r=["api","graphql","-F","query=@-"],i=0,a=Object.entries(t);case 1:if(!(i<a.length)){n.n=4;break}if(o=j(a[i],2),u=o[0],void 0!==(c=o[1])&&""!==c){n.n=2;break}return n.a(3,3);case 2:r.push("-F","".concat(u,"=").concat(c));case 3:i++,n.n=1;break;case 4:return f=JSON,n.n=5,ln(r,e);case 5:if(s=f.parse.call(f,n.v),Array.isArray(s.errors)){n.n=6;break}return n.a(2,s);case 6:l=s.errors.map(function(n){var e;return null!=(e=n.message)?e:"Unknown GraphQL error"}).join("\n"),tn("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function bn(n){return f(n,nn)}function kn(n){return JSON.parse(JSON.stringify(n))}function xn(n,e){var t,i,a,o,u=r(null!=(t=n[0])?t:"",n.slice(1),{encoding:"utf8",input:e});return{exitCode:null!=(i=u.status)?i:u.error?1:0,output:"".concat(null!=(a=u.stdout)?a:"").concat(null!=(o=u.stderr)?o:"")}}function In(n,e,t){return"gh"===n[0]&&0!==e&&/(HTTP 50[0234]\b|We had issues producing the response to your request)/i.test(t)}var Sn=/\btest\b/i,jn=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","jobs","name","number","startedAt","status","updatedAt","url","workflowName"],On=/^.*?\tUNKNOWN STEP\t\d{4}-\d{2}-\d{2}T[^Z]+Z\s*/,Rn=0===xn(["rtk","--version"]).exitCode;function An(n){return Cn.apply(this,arguments)}function Cn(){return(Cn=g(x().m(function n(e){var t,r,i,a,o,u,c,s,l,f;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return u=["pr","checks"],e&&u.push(e),u.push("--json","bucket,completedAt,description,event,link,name,startedAt,state,workflow"),c=[],n.p=1,n.n=2,pn(u,[8]);case 2:s=n.v,c=s.trim().length>0?JSON.parse(s):[],n.n=5;break;case 3:if(n.p=3,!((f=n.v)instanceof SyntaxError)){n.n=4;break}c=[],n.n=5;break;case 4:throw f;case 5:return l=c.reduce(function(n,e){var t,r,i=null!=(t=e.bucket)?t:"";return n[i]=(null!=(r=n[i])?r:0)+1,n},{}),n.a(2,{summary:{total:c.length,pass:null!=(t=l.pass)?t:0,fail:null!=(r=l.fail)?r:0,pending:null!=(i=l.pending)?i:0,skipping:null!=(a=l.skipping)?a:0,cancel:null!=(o=l.cancel)?o:0},checks:c})}},n,null,[[1,3]])}))).apply(this,arguments)}function $n(n,e,t,r){return Pn.apply(this,arguments)}function Pn(){return(Pn=g(x().m(function n(e,t,r,i){var a,o,u,s,l,f,p,d;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t=Mn),void 0===r&&(r=An),void 0===i&&(i=function(n){return c.write(n)}),a=0,n.n=1,r(e);case 1:o=n.v,u=function(){},n.p=2;case 3:if(s=qn(o),l=En(s),f=j(l,2),p=f[0],d=f[1],!(Object.keys(p).length>0||0===Object.keys(d).length)){n.n=4;break}return n.a(2,[o,a,!1]);case 4:if(!(a>=100)){n.n=5;break}return n.a(2,[o,a,!0]);case 5:return 1===(a+=1)&&(u=G("Waiting for test-related workflows to finish.",36,i)),n.n=6,t(36);case 6:return n.n=7,r(e);case 7:o=n.v;case 8:n.n=3;break;case 9:return n.p=9,u(),n.f(9);case 10:return n.a(2)}},n,null,[[2,,9,10]])}))).apply(this,arguments)}function qn(n){var e=n.checks.reduce(function(n,e){var t=e.workflow||e.name||"unknown_workflow";return null!=n[t]||(n[t]=[]),n[t].push(e),n},{});return Object.fromEntries(Object.entries(e).map(function(n){var e,t=j(n,2),r=t[0],i=function(n){var e=n.reduce(function(n,e){var t=function(n){var e=Nn(n);return e?"run:".concat(e):"unknown_run"}(e),r=n.get(t);return r?(r.push(e),n):(n.set(t,[e]),n)},new Map);return Array.from(e.values()).reduce(function(n,e){return 0===n.length||Wn(e)>Wn(n)?e:n},[])}(t[1]),a=i[0];a||tn("Error: no checks found for workflow ".concat(r));var o=null!=(e=i.reduce(function(n,e){return n?Dn(e)>Dn(n)?e:n:e},void 0))?e:a;return[r,{classification:_n(i),check:o,checks:i}]}))}function En(n){for(var e={},t={},r=0,i=Object.entries(n);r<i.length;r++){var a=j(i[r],2),o=a[0],u=a[1];"failed"!==u.classification?"running"===u.classification&&u.checks.some(function(n){return Gn(n)})&&(t[o]=u):e[o]=u}return[e,t]}function Nn(n){var e,t=null==n?void 0:n.link;if(t)return null==(e=t.match(/\/actions\/runs\/(\d+)/))?void 0:e[1]}function Tn(n){return Ln.apply(this,arguments)}function Ln(){return(Ln=g(x().m(function n(e){var t,r;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,void 0);case 1:return n.n=2,pn(["run","view",e,"--json",jn.join(",")],[1]);case 2:if(0!==(t=n.v).trim().length){n.n=3;break}return n.a(2,void 0);case 3:return n.p=3,n.a(2,JSON.parse(t));case 4:if(n.p=4,!((r=n.v)instanceof SyntaxError)){n.n=5;break}return c.write("Warning: Could not parse JSON for workflow run ".concat(e,": ").concat(r.message,"\n")),n.a(2,void 0);case 5:throw r;case 6:return n.a(2)}},n,null,[[3,4]])}))).apply(this,arguments)}function _n(n){var e=n.map(function(n){var e;return null!=(e=n.bucket)?e:""});return e.some(function(n){return!["pass","skipping","pending"].includes(n)})?"failed":e.includes("pending")?"running":"successful"}function Dn(n){var e,t=n.completedAt;return t&&"0001-01-01T00:00:00Z"!==t?t:null!=(e=n.startedAt)?e:""}function Gn(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&Sn.test(n)})}function Mn(n){return Un.apply(this,arguments)}function Un(){return(Un=g(x().m(function n(e){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,s(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Fn(){return Hn.apply(this,arguments)}function Hn(){return(Hn=g(x().m(function n(){var e,t,r,i,a,o,u,c,s,l,f,p;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,vn();case 1:return e=n.v,en("Fetching latest CI results..."),n.n=2,$n(e);case 2:if(t=n.v,r=j(t,3),i=r[0],a=r[1],o=r[2],u=qn(i),c=En(u),s=j(c,2),l=s[0],f=s[1],p={summary:kn(i.summary),waited_for_test_related_checks:a>0,test_related_check_wait_attempts:a,test_related_check_wait_timed_out:o},!(Object.keys(l).length>0)){n.n=4;break}return n.n=3,Promise.all(Object.entries(l).map(g(x().m(function n(e){var t,r,i,a,o,u,c;return x().w(function(n){for(;;)switch(n.n){case 0:return t=j(e,2),r=t[0],i=t[1],n.n=1,Jn(r,i);case 1:return a=n.v,o=k,u=k({},a),c=zn,n.n=2,Qn(i.check);case 2:return n.a(2,o(u,c(n.v)))}},n)}))));case 3:return p.failed_workflows=n.v,n.a(2,{output:bn(p),exitCode:1});case 4:if(!(Object.keys(f).length>0)){n.n=6;break}return p.test_workflow_output="Timed out waiting for test-related workflows to finish.",n.n=5,Promise.all(Object.entries(f).map(function(n){var e=j(n,2);return Jn(e[0],e[1])}));case 5:return p.running_test_related_workflows=n.v,n.a(2,{output:bn(p),exitCode:1});case 6:return n.a(2,{output:"All CI workflows passed.\n",exitCode:0})}},n)}))).apply(this,arguments)}function Wn(n){return n.reduce(function(n,e){var t=Dn(e);return t>n?t:n},"")}function Jn(n,e){return Bn.apply(this,arguments)}function Bn(){return(Bn=g(x().m(function n(e,t){var r,i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:return i=Nn(t.check),n.n=1,Tn(i);case 1:return a=n.v,o=Xn(a,Vn(t.check.name)),n.a(2,{classification:t.classification,workflow:e,job:Vn(t.check.name),job_url:Vn(null==o?void 0:o.url),failed_step:ne(o),run_id:i,run_url:null!=(r=Vn(null==a?void 0:a.url))?r:Vn(t.check.link),branch:Vn(null==a?void 0:a.headBranch),sha:Vn(null==a?void 0:a.headSha),conclusion:Vn(null==a?void 0:a.conclusion)})}},n)}))).apply(this,arguments)}function Qn(n){return Yn.apply(this,arguments)}function Yn(){return(Yn=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:if(t=Nn(e)){n.n=1;break}return n.a(2,"Failed latest result has no GitHub Actions run link.");case 1:return n.n=2,pn(["run","view",t,"--log-failed"],[1]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function zn(n){return{failed_log:Kn(n)}}function Kn(n){var e=Zn(l(n));if(!Rn)return e;var t=xn(["rtk","log"],e);return 0===t.exitCode&&t.output.trim().length>0?Zn(t.output):e}function Zn(n){return n.split("\n").map(function(n){return n.replace(On,"")}).join("\n").trim()}function Vn(n){return"string"==typeof n&&n.length>0?n:void 0}function Xn(n,e){var t,r;if(null!=n&&n.jobs&&0!==n.jobs.length)return null!=(t=null!=(r=n.jobs.find(function(n){return n.name===e}))?r:n.jobs.find(function(n){return"failure"===n.conclusion}))?t:n.jobs.find(function(n){return"completed"!==n.status})}function ne(n){var e,t,r;if(null!=n&&n.steps&&0!==n.steps.length)return null!=(e=null==(t=n.steps.find(function(n){return"failure"===n.conclusion}))?void 0:t.name)?e:null==(r=n.steps.find(function(n){return"completed"!==n.status}))?void 0:r.name}function ee(){return te.apply(this,arguments)}function te(){return(te=g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ae();case 1:if(null==(e=n.v)){n.n=2;break}t=e,n.n=4;break;case 2:return n.n=3,re();case 3:t=n.v;case 4:return n.a(2,t)}},n)}))).apply(this,arguments)}function re(){return ie.apply(this,arguments)}function ie(){return(ie=g(x().m(function n(){var e;return x().w(function(n){for(;;)switch(n.n){case 0:return e=ce,n.n=1,q(["gh","repo","view","--json","defaultBranchRef","--template","{{.defaultBranchRef.name}}"]);case 1:return n.a(2,e(n.v.trim(),"Error: could not determine the default branch"))}},n)}))).apply(this,arguments)}function ae(){return oe.apply(this,arguments)}function oe(){return(oe=g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,q(["gh","pr","view","--json","baseRefName","--template","{{.baseRefName}}"]);case 1:return e=n.v.trim(),n.a(2,e.length>0?e:void 0);case 2:if(n.p=2,!ue(t=n.v)){n.n=3;break}return n.a(2,void 0);case 3:throw t;case 4:return n.a(2)}},n,null,[[0,2]])}))).apply(this,arguments)}function ue(n){return/no pull requests? found for branch/i.test(String(n))}function ce(n,e){if(n.length>0)return n;throw new Error(e)}function se(n){return ye(n,"issue")}function le(n){return ye(n,"pull request")}function fe(n){return pe.apply(this,arguments)}function pe(){return(pe=g(x().m(function n(e){var t,r,i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,hn();case 1:return t=n.v,r=j(t,2),i=r[0],a=r[1],n.n=2,be(i,a,se(e));case 2:return o=n.v,en("Fetched issue #".concat(o.number," messages.")),n.a(2,bn({issue:o}))}},n)}))).apply(this,arguments)}function de(n){return he.apply(this,arguments)}function he(){return(he=g(x().m(function n(e){var t,r,i;return x().w(function(n){for(;;)switch(n.n){case 0:if(void 0!==e){n.n=2;break}return n.n=1,vn();case 1:i=n.v,n.n=3;break;case 2:i=le(e);case 3:return t=i,n.n=4,ge(t);case 4:return r=n.v,en("Fetched pull request #".concat(r.number," messages.")),n.a(2,bn({pull_request:r}))}},n)}))).apply(this,arguments)}function me(){return ve.apply(this,arguments)}function ve(){return(ve=g(x().m(function n(){var e,t,r;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,pn(["pr","view","--json","number","--jq",".number"],[1]);case 1:if(e=n.v,t=e.trim(),!ue(e)&&/^\d+$/.test(t)){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,ge(t);case 3:return r=n.v,n.a(2,bn({pull_request:r}))}},n)}))).apply(this,arguments)}function ge(n){return we.apply(this,arguments)}function we(){return(we=g(x().m(function n(e){var t,r,i,a;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,hn();case 1:return t=n.v,r=j(t,2),i=r[0],a=r[1],n.n=2,xe(i,a,e);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function ye(n,e){var t=String(n).trim();if(0===t.length&&tn("Error: ".concat(e," reference is required"),2),/^\d+$/.test(t))return t;var r="issue"===e?"issues":"pull",i=t.match(new RegExp("^https?://(?:www\\.)?github\\.com/[^/]+/[^/]+/".concat(r,"/(\\d+)(?:/|$)")));if(null!=i&&i[1])return i[1];tn("Error: expected a GitHub ".concat(e,' number or URL, received "').concat(t,'"'),2)}function be(n,e,t){return ke.apply(this,arguments)}function ke(){return(ke=g(x().m(function n(e,t,r){var i,a;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Pe({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:t,number:r,noun:"issue",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.issue}});case 1:return i=n.v,n.n=2,Ce({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.issue)?void 0:e.comments},mapNode:Ee});case 2:return a=n.v,n.a(2,k(k({},i),{},{messages:a}))}},n)}))).apply(this,arguments)}function xe(n,e,t){return Ie.apply(this,arguments)}function Ie(){return(Ie=g(x().m(function n(e,t,r){var i,a,o,u,c;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Pe({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:t,number:r,noun:"pull request",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.pullRequest}});case 1:return i=n.v,n.n=2,Promise.all([je(e,t,r),Re(e,t,r)]);case 2:return a=n.v,o=j(a,2),u=o[0],c=o[1],n.a(2,k(k({},i),{},{messages:[].concat(O(u),O(c)).sort(Se)}))}},n)}))).apply(this,arguments)}function Se(n,e){var t="string"==typeof n.createdAt?n.createdAt:"",r="string"==typeof e.createdAt?e.createdAt:"";return t.localeCompare(r)}function je(n,e,t){return Oe.apply(this,arguments)}function Oe(){return(Oe=g(x().m(function n(e,t,r){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ce({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.comments},mapNode:Ee});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Re(n,e,t){return Ae.apply(this,arguments)}function Ae(){return(Ae=g(x().m(function n(e,t,r){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ce({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviews(first: 100, after: $cursor) {\n nodes {\n id\n body\n state\n submittedAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.reviews},mapNode:Ne});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Ce(n){return $e.apply(this,arguments)}function $e(){return($e=g(x().m(function n(e){var t,r,i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:r=[];case 1:return o=e,n.n=2,wn(e.query,{owner:e.owner,name:e.name,number:Number(e.number),cursor:t});case 2:if(a=o.selectConnection.call(o,n.v)){n.n=3;break}return n.a(2,r);case 3:if(r.push.apply(r,O(a.nodes.map(e.mapNode).filter(Te))),a.pageInfo.hasNextPage){n.n=4;break}return n.a(2,r);case 4:t=null!=(i=a.pageInfo.endCursor)?i:void 0;case 5:n.n=1;break;case 6:return n.a(2)}},n)}))).apply(this,arguments)}function Pe(n){return qe.apply(this,arguments)}function qe(){return(qe=g(x().m(function n(e){var t,r,i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:return o=e,n.n=1,wn(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(a=o.selectMetadata.call(o,n.v))||tn("Could not find ".concat(e.noun," #").concat(e.number," in ").concat(e.owner,"/").concat(e.name,".")),n.a(2,{number:a.number,title:a.title,url:a.url,author:null!=(t=null==(r=a.author)?void 0:r.login)?t:void 0,body:null!=(i=a.body)?i:""})}},n)}))).apply(this,arguments)}function Ee(n){var e,t;return{type:"comment",author:null!=(e=null==(t=n.author)?void 0:t.login)?e:void 0,createdAt:n.createdAt,url:n.url,body:n.body}}function Ne(n){var e,t,r,i,a;return{type:"review",author:null!=(e=null==(t=n.author)?void 0:t.login)?e:void 0,state:null!=(r=n.state)?r:void 0,createdAt:null!=(i=n.submittedAt)?i:void 0,url:n.url,body:null!=(a=n.body)?a:""}}function Te(n){return"string"==typeof n.body&&n.body.length>0}function Le(n){return _e.apply(this,arguments)}function _e(){return(_e=g(x().m(function n(e){var t,r,i,a,o,u,c,s;return x().w(function(n){for(;;)switch(n.n){case 0:return r=(t=void 0===e?{}:e).body,i=t.title,n.n=1,cn(["git","branch","--show-current"]);case 1:return a=n.v.trim(),n.n=2,ln(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return o=n.v.trim(),a||tn("Error: could not determine current branch"),o||tn("Error: could not determine default branch"),a===o&&tn("Error: current branch is the default branch (".concat(o,")")),u=["pr","create","--base",o,"--head",a,"--fill"],i&&u.push("--title",i),r&&u.push("--body-file","-"),en("Creating pull request..."),n.n=3,ln(u,r);case 3:return c=bn,s=JSON,n.n=4,ln(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,c(s.parse.call(s,n.v)))}},n)}))).apply(this,arguments)}function De(n){return Ge.apply(this,arguments)}function Ge(){return(Ge=g(x().m(function n(e){var t,r,i;return x().w(function(n){for(;;)switch(n.n){case 0:return t=e.body,r=e.title,n.n=1,vn();case 1:return i=n.v,en("Updating pull request #".concat(i,"...")),n.n=2,Me(i,["--title",r,"--body-file","-"],t);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Me(n,e,t){return Ue.apply(this,arguments)}function Ue(){return(Ue=g(x().m(function n(e,t,r){var i,a;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln(["pr","edit",e].concat(O(t)),r);case 1:return i=bn,a=JSON,n.n=2,ln(["pr","view",e,"--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author,body"]);case 2:return n.a(2,i(a.parse.call(a,n.v)))}},n)}))).apply(this,arguments)}function Fe(){return He.apply(this,arguments)}function He(){return(He=g(x().m(function n(){var e,t,r,i,a,o,u,c;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,on("Error: JSON input is required on stdin");case 1:for(e=n.v,t=et(e),r={},i=0,a=Object.entries(t.replies);i<a.length;i++)o=j(a[i],2),u=o[0],"string"==typeof(c=o[1])&&c.length>0&&(r[u]=c);return n.a(2,r)}},n)}))).apply(this,arguments)}function We(n,e,t,r,i){return Je.apply(this,arguments)}function Je(){return(Je=g(x().m(function n(e,t,r,i,a){var o,u,c,s,l,f,p,d,h,m,v,g;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,wn(e,{owner:t,name:r,number:Number(i),cursor:o});case 1:if(m=u=n.v.data,h=null==m){n.n=2;break}h=null==(u=u.repository);case 2:if(d=h){n.n=3;break}d=null==(u=u.pullRequest);case 3:if(!d){n.n=4;break}v=void 0,n.n=5;break;case 4:v=u.reviewThreads;case 5:(s=v)||tn("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),l=w(s.nodes),n.p=6,l.s();case 7:if((f=l.n()).done){n.n=9;break}return p=f.value,n.n=8,a(p);case 8:n.n=7;break;case 9:n.n=11;break;case 10:n.p=10,g=n.v,l.e(g);case 11:return n.p=11,l.f(),n.f(11);case 12:if(s.pageInfo.hasNextPage){n.n=13;break}return n.a(2);case 13:o=null!=(c=s.pageInfo.endCursor)?c:void 0;case 14:n.n=0;break;case 15:return n.a(2)}},n,null,[[6,10,11,12]])}))).apply(this,arguments)}function Be(n,e,t){return Qe.apply(this,arguments)}function Qe(){return(Qe=g(x().m(function n(e,t,r){var i;return x().w(function(n){for(;;)switch(n.n){case 0:return i=[],n.n=1,We("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,t,r,function(n){n.isResolved||i.push(n.id)});case 1:return n.a(2,i)}},n)}))).apply(this,arguments)}function Ye(n,e,t){return ze.apply(this,arguments)}function ze(){return(ze=g(x().m(function n(e,t,r){var i;return x().w(function(n){for(;;)switch(n.n){case 0:return i=[],n.n=1,We("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n isOutdated\n path\n line\n originalLine\n startLine\n originalStartLine\n comments(first: 100) {\n nodes {\n id\n url\n body\n createdAt\n diffHunk\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,t,r,g(x().m(function n(e){var t,r,a,o,u,c,s,l,f,p;return x().w(function(n){for(;;)switch(n.n){case 0:if(!e.isResolved){n.n=1;break}return n.a(2);case 1:r=e.comments.nodes.map(nt),a=e.comments.pageInfo,o=null!=(t=a.endCursor)?t:void 0;case 2:if(!a.hasNextPage){n.n=7;break}return n.n=3,wn("\n query($threadId: ID!, $cursor: String) {\n node(id: $threadId) {\n ... on PullRequestReviewThread {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n url\n body\n createdAt\n diffHunk\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",{threadId:e.id,cursor:o});case 3:if(f=u=n.v.data,l=null==f){n.n=4;break}l=null==(u=u.node);case 4:if(!l){n.n=5;break}p=void 0,n.n=6;break;case 5:p=u.comments;case 6:(s=p)||tn("Could not find comments in GraphQL response for thread ".concat(e.id,".")),r.push.apply(r,O(s.nodes.map(nt))),a=s.pageInfo,o=null!=(c=a.endCursor)?c:void 0,n.n=2;break;case 7:i.push({id:e.id,isResolved:e.isResolved,isOutdated:e.isOutdated,path:e.path,line:e.line,originalLine:e.originalLine,startLine:e.startLine,originalStartLine:e.originalStartLine,comments:r});case 8:return n.a(2)}},n)})));case 1:return n.a(2,i)}},n)}))).apply(this,arguments)}function Ke(){return Ze.apply(this,arguments)}function Ze(){return(Ze=g(x().m(function n(){var e,t,r,i,a,o,u;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,hn();case 1:return e=n.v,t=j(e,2),r=t[0],i=t[1],n.n=2,vn();case 2:return a=n.v,en("Fetching unresolved review threads..."),o=bn,n.n=3,Ye(r,i,a);case 3:return u=n.v,n.a(2,o({unresolved_threads:u}))}},n)}))).apply(this,arguments)}function Ve(n){return Xe.apply(this,arguments)}function Xe(){return(Xe=g(x().m(function n(e){var t,r,i,a,o,u,c,s,l,f,p,d,h,m,v,g,y,b,k,I;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,hn();case 1:return t=n.v,r=j(t,2),i=r[0],a=r[1],n.n=2,vn();case 2:return o=n.v,b=Set,n.n=3,Be(i,a,o);case 3:k=n.v,u=new b(k),en("Replying to ".concat(Object.keys(e).length," review threads...")),c=[],s=Object.entries(e),l=w(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(d=j(f.value,2),h=d[0],m=j(d[1],2),v=m[0],g=m[1],en("Processing ".concat(h+1,"/").concat(s.length,": ").concat(v)),u.has(v)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,wn("\n mutation($threadId: ID!, $body: String!) {\n addPullRequestReviewThreadReply(input: {pullRequestReviewThreadId: $threadId, body: $body}) {\n comment {\n id\n url\n }\n }\n resolveReviewThread(input: {threadId: $threadId}) {\n thread {\n id\n isResolved\n }\n }\n }\n ",{threadId:v,body:g});case 7:y=n.v,null!=(p=y.data)&&null!=(p=p.resolveReviewThread)&&null!=(p=p.thread)&&p.isResolved?c.push(v):en("Warning: failed to resolve thread ".concat(v,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,I=n.v,l.e(I);case 11:return n.p=11,l.f(),n.f(11);case 12:return en("Done."),n.a(2,bn({resolved_thread_ids:c}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function nt(n){var e,t;return k(k({},n),{},{author:"string"==typeof n.author?n.author:null!=(e=null==(t=n.author)?void 0:t.login)?e:null})}function et(n){try{var e=JSON.parse(n);return function(n){if("object"!==R(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==R(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||tn("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&tn("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function tt(n){return rt.apply(this,arguments)}function rt(){return(rt=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,fe(e);case 1:return t=n.v,n.a(2,"\nPlan a GitHub issue by gathering context, writing a specification for software engineers, and posting or updating that specification back to the issue.\nThe target issue number is #".concat(e,". Here is the fetched issue context as YAML:\n~~~~yaml\n").concat(t.trim(),"\n~~~~\n\nFollow this workflow:\n1. Read the above issue body and timeline messages carefully.\n2. Collect enough supporting information before writing the specification:\n - Inspect the relevant code, surrounding call sites, related types, tests, configuration, recent diffs, and any other local context needed to understand the change.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the issue depends on runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - Clean up any temporary files after the experiment.\n - If the issue depends on a library, API, or language feature, confirm it against the latest official documentation or another primary source instead of relying on memory.\n3. Write the specification for the issue comment.\n - Write the background based on the collected information.\n - Define a goal that clearly guides our implementation in the right direction.\n - Write a detailed specification incorporating the evidence you collected.\n - If needed, include code snippets that explain how to use libraries or APIs, along with references to their documentation.\n4. Post the specification back to issue #").concat(e,", then print the issue URL.\n - If the issue already has a specification, update the existing comment instead of posting a new one.\n\nFormat the issue comment exactly like this, but do not include the surrounding `~~~~` fences in the actual comment:\n~~~~\n## Background\n\n[Summarize the current behavior and explain the motivation behind this issue]\n\n## Goal\n\n[Define the goal we want to achieve in this issue]\n\n## Specification\n\n[Detailed specification for software engineers]\n\n## Key Technologies (ONLY if external resources are needed)\n\n[Describe what libraries or APIs we should use, including concrete versions and code snippets.]\n\n~~~~\n").trim())}},n)}))).apply(this,arguments)}function it(n){return"git merge-base ".concat(at("origin/".concat(n))," HEAD 2>/dev/null || git merge-base ").concat(at(n)," HEAD")}function at(n){return"'".concat(n.replaceAll("'","'\"'\"'"),"'")}function ot(){return ut.apply(this,arguments)}function ut(){return(ut=g(x().m(function n(){var e,t,r;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ee();case 1:return e=n.v,t=it(e),n.n=2,me();case 2:return r=n.v,n.a(2,"\nReview the current ".concat(r?"pull request":"branch"," against its base branch ").concat(e,' via `git diff "$(').concat(t,')"`.\nFor each finding, do the following three steps:\n1. Gather supporting evidence:\n - Inspect the referenced code and the surrounding call sites, related types, tests, configuration, and recent diffs when they affect the claim.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the finding is about runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - Clean up any temporary files after the experiment.\n - If the finding depends on framework, library, platform, or language behavior, confirm it against the latest official documentation or another primary source instead of relying on memory.\n2. Judge whether the finding is valid:\n - Mark it valid only when the available evidence shows the reported issue is still real in the current codebase.\n - Otherwise, mark it not valid.\n3. Propose a fix without modifying the code:\n - Describe the smallest practical change that would address the finding.\n - Investigate the likely impact of that change by inspecting the affected call sites, related types, tests, configuration, and adjacent behavior, and note any follow-up changes or risks the fix would need to account for.\n\nReport only the valid findings, the evidence for each one, and the proposed fix with its likely impact. Include a brief justification for each, citing the evidence used (e.g., a failing scenario, experiment result, or official documentation). Do not modify the code.\nIf there are no valid findings, respond exactly with: `').concat(F,"`\n\n").concat(ct(r),"\n").trim())}},n)}))).apply(this,arguments)}function ct(n){return n?"Current pull request context:\n~~~~yaml\n".concat(n.trim(),"\n~~~~\n").trim():""}function st(n,e,t){var r=t.replaceAll("\n"," ").replaceAll('"',"'");return'\nUse `playwright-cli` skill to take a screenshot of "'.concat(r,'" by navigating from ').concat(n,' to "').concat(e,'" page.\n\nFollow this workflow:\n1. Open the initial page at ').concat(n,".\n2. Navigate from that initial page until you reach the page identified as ").concat(e,'.\n - If code errors, runtime failures, or broken UI flows prevent navigation, investigate the cause in the local codebase, make the smallest practical code fix, and verify that the page can now be reached before continuing.\n - If you cannot fix the errors, report on the errors then stop.\n3. Capture a screenshot that focuses on this target: "').concat(r,'".\n4. Keep the generated image artifact and report the screenshot file path plus a brief description of what was captured. If you had to fix code first, also summarize the fix.\n').trim()}function lt(){return ft.apply(this,arguments)}function ft(){return(ft=g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ee();case 1:return e=n.v,t=it(e),n.a(2,'\nSimplify the current branch against its base branch using `git diff "$('.concat(t,")\"`.\nFirst, inspect the diff and review the surrounding code for each changed area. This includes nearby functions, types, call sites, tests, configurations, and any other files that help determine if the change is truly necessary.\nLeverage this context to identify redundancies that can be safely removed or simplified. Look for duplicate logic, repeated conditionals, unnecessary abstractions, overlapping code paths, dead code, or edits made obsolete upon understanding the broader context.\n\nPrioritize simplifications that reduce the reviewer's burden, such as:\n- Removing redundant edits or dead code.\n- Eliminating or merging duplicated logic discovered by comparing the diff with related code.\n- Flattening unnecessarily complex logic introduced in the diff (e.g., using early returns to reduce nesting, simplifying boolean expressions, or removing redundant wrapper functions).\n\nCommit and push your changes. Afterward, summarize the redundancies or unnecessary complexity you have removed.\n").trim())}},n)}))).apply(this,arguments)}function pt(){return dt.apply(this,arguments)}function dt(){return(dt=g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,q(["bunx","skills@latest","add",p(new URL("../..",import.meta.url)),"--global","--yes","--skill","*","--agent","claude-code","--agent","codex","--agent","gemini-cli"],{waitMessage:"Installing packaged skills globally."});case 1:return n.a(2)}},n)}))).apply(this,arguments)}var ht=new n;function mt(n){var t=ht.command(n.name).description(n.description).allowExcessArguments(!1);n.argumentName&&t.argument(n.argumentName,n.argumentDescription),t.addOption(new e("--agent <agent>",n.optionDescription).choices(n.choices).makeOptionMandatory()).action(g(x().m(function e(){var t,r,i,a,o,u,c,s,l,f=arguments;return x().w(function(e){for(;;)switch(e.n){case 0:for(t=f.length,r=new Array(t),i=0;i<t;i++)r[i]=f[i];return a=j(r,2),o=a[0],u=a[1],c="string"==typeof o?o:"",s="string"==typeof o?u:o,l=process.stdout,e.n=1,n.run(s.agent,c);case 1:l.write.call(l,e.v);case 2:return e.a(2)}},e)})))}function vt(n,e,t){var r=ht.command(n).description(e).allowExcessArguments(!1);"function"!=typeof t?r.argument(t.argumentName,t.argumentDescription).action(g(x().m(function n(e){var r;return x().w(function(n){for(;;)switch(n.n){case 0:return r=process.stdout,n.n=1,t.run(e);case 1:r.write.call(r,n.v);case 2:return n.a(2)}},n)}))):r.action(g(x().m(function n(){var e;return x().w(function(n){for(;;)switch(n.n){case 0:return e=process.stdout,n.n=1,t();case 1:e.write.call(e,n.v);case 2:return n.a(2)}},n)})))}ht.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),ht.command("install-skills").description("Install all packaged skills globally for Claude Code, Codex, and Gemini CLI").allowExcessArguments(!1).action(g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,pt();case 1:process.stdout.write("Done\n");case 2:return n.a(2)}},n)}))),mt({name:"review",description:"Run review against the current branch with the selected agent",optionDescription:"Use a review agent",choices:["all","codex","claude","gemini"],run:function(n){return"all"===n?J(ot(),{allAgentsLabel:"review agents",mapOutput:function(n,e){if(!function(n){return W.test(n)}(e))return"## ".concat(K(n),"\n\n").concat(e)}}):Q(n,ot())}}),vt("review-codex","Run Codex review against the current branch",function(){return Q("codex",ot())}),vt("review-claude","Run Claude Code review against the current branch",function(){return Q("claude",ot())}),vt("review-gemini","Run Gemini CLI review against the current branch",function(){return Q("gemini",ot())}),mt({name:"plan",description:"Run planning against the specified issue with the selected agent",optionDescription:"Use a planning agent",choices:["all","codex","claude","gemini"],argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n,e){return"all"===n?J(tt(se(e)),{allAgentsLabel:"planning agents"}):Q(n,tt(se(e)))}}),vt("plan-codex","Run Codex planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return Q("codex",tt(se(n)))}}),vt("plan-claude","Run Claude Code planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return Q("claude",tt(se(n)))}}),vt("plan-gemini","Run Gemini CLI planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return Q("gemini",tt(se(n)))}}),ht.command("screenshot").description("Take a screenshot with the selected agent via playwright-cli").argument("<initial-url>","Initial URL to open before navigating").argument("<page-name>","Page name to navigate to from the initial page").argument("<description>","Description of the part to capture in the screenshot").addOption(new e("--agent <agent>","Use a screenshot agent").choices(["codex","claude","gemini"]).makeOptionMandatory()).allowExcessArguments(!1).action(g(x().m(function n(e,t,r,i){var a;return x().w(function(n){for(;;)switch(n.n){case 0:return a=process.stdout,n.n=1,Q(i.agent,st(e,t,r));case 1:a.write.call(a,n.v);case 2:return n.a(2)}},n)}))),mt({name:"simplify",description:"Run PR simplification against the current branch with the selected agent",optionDescription:"Use a simplify agent",choices:["codex","claude","gemini"],run:function(n){return Q(n,lt())}}),vt("simplify-codex","Run Codex PR simplification against the current branch",function(){return Q("codex",lt())}),vt("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return Q("claude",lt())}),vt("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return Q("gemini",lt())}),ht.command("open-pr").description("Create a pull request for the current branch").argument("<title>","Pull request title").allowExcessArguments(!1).action(g(x().m(function n(e){var t,r;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,rn();case 1:return t=n.v,n.n=2,Le({body:t||void 0,title:e});case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),ht.command("update-pr").description("Update the current pull request title and body").argument("<title>","Pull request title").allowExcessArguments(!1).action(g(x().m(function n(e){var t,r;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,on("Error: PR body input is required on stdin");case 1:return t=n.v,n.n=2,De({body:t,title:e});case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),ht.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(g(x().m(function n(){var e;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Fn();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),ht.command("fetch-issue").description("Fetch an issue body and timeline messages as YAML").argument("<issue>","GitHub issue number or URL").allowExcessArguments(!1).action(g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,fe(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),ht.command("fetch-pr").description("Fetch a pull request body and timeline messages as YAML, excluding inline comments").argument("[pr]","GitHub pull request number or URL; defaults to the current branch pull request").allowExcessArguments(!1).action(g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,de(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),ht.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(g(x().m(function n(){var e;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ke();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),ht.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Fe();case 1:return e=n.v,n.n=2,Ve(e);case 2:t=n.v,process.stdout.write(t);case 3:return n.a(2)}},n)}))),await ht.parseAsync(process.argv);
|
|
5
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy95YW1sLnRzIiwiLi4vc3JjL3ByL3NoYXJlZC50cyIsIi4uL3NyYy9wci9jaS50cyIsIi4uL3NyYy9yZXBvL2RlZmF1bHRCcmFuY2gudHMiLCIuLi9zcmMvcHIvbWVzc2FnZXMudHMiLCIuLi9zcmMvcHIvcHVsbFJlcXVlc3QudHMiLCIuLi9zcmMvcHIvcmV2aWV3VGhyZWFkcy50cyIsIi4uL3NyYy9wcm9tcHRzL3BsYW5Qcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9iYXNlQnJhbmNoRGlmZkNvbW1hbmQudHMiLCIuLi9zcmMvcHJvbXB0cy9yZXZpZXdQcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9zY3JlZW5zaG90UHJvbXB0LnRzIiwiLi4vc3JjL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQudHMiLCIuLi9zcmMvc2tpbGxzL2luc3RhbGxTa2lsbHMudHMiLCIuLi9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbnR5cGUgUnVuQ29tbWFuZE9wdGlvbnMgPSB7XG4gIGxvZ0ZpbGVQYXRoPzogc3RyaW5nO1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIHdhaXRNZXNzYWdlPzogc3RyaW5nIHwgZmFsc2U7XG4gIHdhaXRJbnRlcnZhbFNlY29uZHM/OiBudW1iZXI7XG59O1xuXG50eXBlIFByb2dyZXNzV3JpdGVyID0gKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIEtpbGxhYmxlUHJvY2VzcyA9IHsga2lsbDogKHNpZ25hbD86IE5vZGVKUy5TaWduYWxzKSA9PiBib29sZWFuOyBwaWQ/OiBudW1iZXIgfTtcblxuLy8gVGhlIG9uZS1ob3VyIGJ1ZGdldCBrZWVwcyBhZ2VudHMgd2FpdGluZyBmb3IgbG9uZy1ydW5uaW5nIGNvbW1hbmRzIHdpdGhvdXQgcmVxdWlyaW5nIHRoZSBwcm9jZXNzIHRvIHVzZSB0aGUgZnVsbCBob3VyLlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTID0gMzY7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QUk9DRVNTX1RJTUVPVVRfTVMgPSA2MCAqIDYwICogMTAwMDtcbmNvbnN0IERPVFNfUEVSX1BST0dSRVNTX1BFUkNFTlRfU1RFUCA9IDU7XG5jb25zdCBGT1JDRV9LSUxMX1RJTUVPVVRfTVMgPSA1MDAwO1xuY29uc3QgTUFYX1BST0dSRVNTX1BFUkNFTlQgPSAxMDA7XG5jb25zdCBQUk9DRVNTX0NMRUFOVVBfU0lHTkFMUyA9IFsnU0lHSU5UJywgJ1NJR1RFUk0nLCAnU0lHSFVQJ10gYXMgY29uc3Q7XG5jb25zdCBhY3RpdmVQcm9jZXNzZXMgPSBuZXcgU2V0PEtpbGxhYmxlUHJvY2Vzcz4oKTtcbmxldCBjbGVhbnVwSGFuZGxlcnNJbnN0YWxsZWQgPSBmYWxzZTtcbi8vIEtlZXAgdGhlIENMSSB0ZXh0IGNvbmNpc2Ugc28gZG93bnN0cmVhbSBwcm9tcHRzIGNhbiBtYXRjaCBpdCBjb25zaXN0ZW50bHkuXG5leHBvcnQgY29uc3QgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HID0gJ1RoaXMgY2FuIHRha2UgdXAgdG8gMSBob3VyOyBkb3RzIGluZGljYXRlIHByb2dyZXNzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIGRldGFjaGVkOiB0cnVlLFxuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgfSk7XG4gIGNvbnN0IHByb2Nlc3NUaW1lb3V0ID0gY3JlYXRlUHJvY2Vzc1RpbWVvdXQocHJvYywgb3B0aW9ucy50aW1lb3V0TXMpO1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKG9wdGlvbnMud2FpdE1lc3NhZ2UsIG9wdGlvbnMud2FpdEludGVydmFsU2Vjb25kcyk7XG4gIGNvbnN0IGNvbW1hbmRMb2dnZXIgPSBhd2FpdCBjcmVhdGVDb21tYW5kTG9nZ2VyKG9wdGlvbnMubG9nRmlsZVBhdGgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQsIChjaHVuaykgPT4gY29tbWFuZExvZ2dlci53cml0ZShjaHVuaykpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyLCAoY2h1bmspID0+IGNvbW1hbmRMb2dnZXIud3JpdGUoY2h1bmspKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG5cbiAgICBpZiAocHJvY2Vzc1RpbWVvdXQudGltZWRPdXQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRpbWVvdXRFcnJvck1lc3NhZ2UoYCR7c3Rkb3V0fSR7c3RkZXJyfWAsIHByb2Nlc3NUaW1lb3V0LnRpbWVvdXRNcywgY29tbWFuZCkpO1xuICAgIH1cblxuICAgIGlmIChleGl0Q29kZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHN0ZG91dDtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcbiAgICB0aHJvdyBuZXcgRXJyb3Iob3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBjb21tYW5kTG9nZ2VyLmNsb3NlKCk7XG4gICAgcHJvY2Vzc1RpbWVvdXQuY2xlYXIoKTtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVvdXRFcnJvck1lc3NhZ2Uob3V0cHV0OiBzdHJpbmcsIHRpbWVvdXRNczogbnVtYmVyLCBjb21tYW5kOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBgQ29tbWFuZCB0aW1lZCBvdXQgYWZ0ZXIgJHtmb3JtYXREdXJhdGlvbih0aW1lb3V0TXMpfTogJHtjb21tYW5kLmpvaW4oJyAnKX1gO1xuICByZXR1cm4gb3V0cHV0Lmxlbmd0aCA+IDAgPyBgJHtvdXRwdXR9XFxuJHttZXNzYWdlfWAgOiBtZXNzYWdlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RHVyYXRpb24obWlsbGlzZWNvbmRzOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAobWlsbGlzZWNvbmRzICUgKDYwICogNjAgKiAxMDAwKSA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAoNjAgKiA2MCAqIDEwMDApfWhgO1xuICB9XG4gIGlmIChtaWxsaXNlY29uZHMgJSAoNjAgKiAxMDAwKSA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAoNjAgKiAxMDAwKX1tYDtcbiAgfVxuICBpZiAobWlsbGlzZWNvbmRzICUgMTAwMCA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAxMDAwfXNgO1xuICB9XG4gIHJldHVybiBgJHttaWxsaXNlY29uZHN9bXNgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvY2Vzc1RpbWVvdXQoXG4gIHByb2M6IEtpbGxhYmxlUHJvY2VzcyxcbiAgdGltZW91dE1zID0gREVGQVVMVF9QUk9DRVNTX1RJTUVPVVRfTVNcbik6IHsgY2xlYXI6ICgpID0+IHZvaWQ7IHRpbWVkT3V0OiAoKSA9PiBib29sZWFuOyB0aW1lb3V0TXM6IG51bWJlciB9IHtcbiAgbGV0IHRpbWVkT3V0ID0gZmFsc2U7XG4gIGxldCBmb3JjZUtpbGxUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG4gIGFjdGl2ZVByb2Nlc3Nlcy5hZGQocHJvYyk7XG4gIGluc3RhbGxDbGVhbnVwSGFuZGxlcnMoKTtcbiAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHRpbWVkT3V0ID0gdHJ1ZTtcbiAgICBraWxsUHJvY2Vzcyhwcm9jLCAnU0lHVEVSTScpO1xuICAgIGZvcmNlS2lsbFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBraWxsUHJvY2Vzcyhwcm9jLCAnU0lHS0lMTCcpLCBGT1JDRV9LSUxMX1RJTUVPVVRfTVMpO1xuICAgIGZvcmNlS2lsbFRpbWVyLnVucmVmKCk7XG4gIH0sIHRpbWVvdXRNcyk7XG4gIHRpbWVvdXQudW5yZWYoKTtcblxuICByZXR1cm4ge1xuICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBpZiAoZm9yY2VLaWxsVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGZvcmNlS2lsbFRpbWVyKTtcbiAgICAgIH1cbiAgICAgIGFjdGl2ZVByb2Nlc3Nlcy5kZWxldGUocHJvYyk7XG4gICAgfSxcbiAgICB0aW1lZE91dDogKCkgPT4gdGltZWRPdXQsXG4gICAgdGltZW91dE1zLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsQ2xlYW51cEhhbmRsZXJzKCk6IHZvaWQge1xuICBpZiAoY2xlYW51cEhhbmRsZXJzSW5zdGFsbGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNsZWFudXBIYW5kbGVyc0luc3RhbGxlZCA9IHRydWU7XG5cbiAgZm9yIChjb25zdCBzaWduYWwgb2YgUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMpIHtcbiAgICBwcm9jZXNzLm9uY2Uoc2lnbmFsLCAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHByb2Mgb2YgYWN0aXZlUHJvY2Vzc2VzKSB7XG4gICAgICAgIGtpbGxQcm9jZXNzKHByb2MsIHNpZ25hbCk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLmV4aXQoMTI4ICsgc2lnbmFsTnVtYmVyKHNpZ25hbCkpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNpZ25hbE51bWJlcihzaWduYWw6ICh0eXBlb2YgUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMpW251bWJlcl0pOiBudW1iZXIge1xuICBzd2l0Y2ggKHNpZ25hbCkge1xuICAgIGNhc2UgJ1NJR0lOVCc6XG4gICAgICByZXR1cm4gMjtcbiAgICBjYXNlICdTSUdURVJNJzpcbiAgICAgIHJldHVybiAxNTtcbiAgICBjYXNlICdTSUdIVVAnOlxuICAgICAgcmV0dXJuIDE7XG4gIH1cbn1cblxuZnVuY3Rpb24ga2lsbFByb2Nlc3MocHJvYzogS2lsbGFibGVQcm9jZXNzLCBzaWduYWw6IE5vZGVKUy5TaWduYWxzKTogdm9pZCB7XG4gIGlmIChwcm9jLnBpZCAmJiBwcm9jLnBpZCA+IDApIHtcbiAgICB0cnkge1xuICAgICAgcHJvY2Vzcy5raWxsKC1wcm9jLnBpZCwgc2lnbmFsKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEZhbGwgYmFjayB0byBraWxsaW5nIHRoZSBkaXJlY3QgY2hpbGQgd2hlbiBwcm9jZXNzLWdyb3VwIHRlcm1pbmF0aW9uIGlzIHVuYXZhaWxhYmxlLlxuICAgIH1cbiAgfVxuICBwcm9jLmtpbGwoc2lnbmFsKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvVGV4dChcbiAgc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBvbkNodW5rPzogKGNodW5rOiBzdHJpbmcpID0+IHZvaWRcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgY29uc3QgY2h1bmtUZXh0ID0gdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyA/IGNodW5rIDogZGVjb2Rlci5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoY2h1bmspLCB7IHN0cmVhbTogdHJ1ZSB9KTtcbiAgICBjaHVua3MucHVzaChjaHVua1RleHQpO1xuICAgIG9uQ2h1bms/LihjaHVua1RleHQpO1xuICB9XG4gIGNvbnN0IGZpbmFsQ2h1bmsgPSBkZWNvZGVyLmRlY29kZSgpO1xuICBpZiAoZmluYWxDaHVuaykge1xuICAgIGNodW5rcy5wdXNoKGZpbmFsQ2h1bmspO1xuICAgIG9uQ2h1bms/LihmaW5hbENodW5rKTtcbiAgfVxuICByZXR1cm4gY2h1bmtzLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2FpdFByb2dyZXNzKFxuICB3YWl0TWVzc2FnZTogc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQsXG4gIHdhaXRJbnRlcnZhbFNlY29uZHMgPSBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyxcbiAgd3JpdGVQcm9ncmVzczogUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZSkgPT4gcHJvY2Vzcy5zdGRlcnIud3JpdGUobWVzc2FnZSlcbik6ICgpID0+IHZvaWQge1xuICBpZiAoIXdhaXRNZXNzYWdlKSB7XG4gICAgcmV0dXJuICgpID0+IHt9O1xuICB9XG5cbiAgbGV0IGRvdENvdW50ID0gMDtcbiAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgd3JpdGVQcm9ncmVzcygnLicpO1xuICAgIGRvdENvdW50ICs9IDE7XG4gICAgaWYgKGRvdENvdW50IDw9IE1BWF9QUk9HUkVTU19QRVJDRU5UICYmIGRvdENvdW50ICUgRE9UU19QRVJfUFJPR1JFU1NfUEVSQ0VOVF9TVEVQID09PSAwKSB7XG4gICAgICAvLyBUaGlzIHRyYWNrcyBlbGFwc2VkIHdhaXQgYnVkZ2V0LCBub3QgdGhlIGNoaWxkIHByb2Nlc3MgY29tcGxldGlvbiBwZXJjZW50YWdlLlxuICAgICAgd3JpdGVQcm9ncmVzcyhgICR7ZG90Q291bnR9JSBkb25lIGApO1xuICAgIH1cbiAgfSwgd2FpdEludGVydmFsU2Vjb25kcyAqIDEwMDApO1xuXG4gIHdyaXRlUHJvZ3Jlc3MoYCR7d2FpdE1lc3NhZ2V9ICR7V0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HfTogYCk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICB3cml0ZVByb2dyZXNzKCdcXG4nKTtcbiAgfTtcbn1cblxudHlwZSBDb21tYW5kTG9nZ2VyID0ge1xuICB3cml0ZTogKGNodW5rOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNsb3NlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ29tbWFuZExvZ2dlcihsb2dGaWxlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxDb21tYW5kTG9nZ2VyPiB7XG4gIGlmICghbG9nRmlsZVBhdGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6ICgpID0+IHt9LFxuICAgICAgY2xvc2U6IGFzeW5jICgpID0+IHt9LFxuICAgIH07XG4gIH1cblxuICBjb25zdCB3YXJuID0gKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYFdhcm5pbmc6IEZhaWxlZCB0byB3cml0ZSBjb21tYW5kIGxvZyB0byAke2xvZ0ZpbGVQYXRofTogJHtTdHJpbmcoZXJyb3IpfVxcbmApO1xuICB9O1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgbWtkaXIoZGlybmFtZShsb2dGaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGNvbnN0IHN0cmVhbSA9IGNyZWF0ZVdyaXRlU3RyZWFtKGxvZ0ZpbGVQYXRoLCB7IGZsYWdzOiAndycgfSk7XG5cbiAgICBzdHJlYW0ub24oJ2Vycm9yJywgd2Fybik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6IChjaHVuaykgPT4ge1xuICAgICAgICBpZiAoc3RyZWFtLndyaXRhYmxlKSB7XG4gICAgICAgICAgc3RyZWFtLndyaXRlKGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PlxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIHN0cmVhbS5lbmQoKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgfSksXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB3YXJuKGVycm9yKTtcbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6ICgpID0+IHt9LFxuICAgICAgY2xvc2U6IGFzeW5jICgpID0+IHt9LFxuICAgIH07XG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBOT19DT05DRVJOX1BIUkFTRSA9ICd0aGVyZSBpcyBubyBjb25jZXJuJztcbmV4cG9ydCBjb25zdCBOT19DT05DRVJOX01FU1NBR0UgPSAnVGhlcmUgaXMgbm8gY29uY2Vybi4nO1xuIiwiaW1wb3J0IHsgY3JlYXRlV2FpdFByb2dyZXNzLCBydW5Db21tYW5kV2l0aFByb2dyZXNzIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSwgTk9fQ09OQ0VSTl9QSFJBU0UgfSBmcm9tICcuLi9yZXZpZXcvbm9Db25jZXJuLmpzJztcblxuZXhwb3J0IGNvbnN0IEFHRU5UX05BTUVTID0gWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10gYXMgY29uc3Q7XG5jb25zdCBDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYID0gbmV3IFJlZ0V4cChgXFxcXGIke05PX0NPTkNFUk5fUEhSQVNFfVxcXFxiYCwgJ2knKTtcbmV4cG9ydCB0eXBlIEFnZW50TmFtZSA9ICh0eXBlb2YgQUdFTlRfTkFNRVMpW251bWJlcl07XG5cbnR5cGUgQWdlbnRDb21tYW5kT3B0aW9ucyA9IHtcbiAgd2FpdE1lc3NhZ2U/OiBzdHJpbmcgfCBmYWxzZTtcbn07XG5cbnR5cGUgQWxsQWdlbnRDb21tYW5kT3B0aW9ucyA9IHtcbiAgYWxsQWdlbnRzTGFiZWw6IHN0cmluZztcbiAgbWFwT3V0cHV0PzogKGFnZW50OiBBZ2VudE5hbWUsIG91dHB1dDogc3RyaW5nKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQWxsQWdlbnRDb21tYW5kcyhcbiAgcHJvbXB0OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4sXG4gIG9wdGlvbnM6IEFsbEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7IGFsbEFnZW50c0xhYmVsOiAnYWdlbnRzJyB9XG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNvbHZlZFByb21wdCA9IGF3YWl0IHByb21wdDtcbiAgY29uc3Qgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyh3YWl0TWVzc2FnZUZvcihvcHRpb25zLmFsbEFnZW50c0xhYmVsKSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBvdXRwdXRzID0gKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIEFHRU5UX05BTUVTLm1hcChhc3luYyAoYWdlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSAoXG4gICAgICAgICAgICBhd2FpdCBydW5BZ2VudENvbW1hbmQoYWdlbnQsIHJlc29sdmVkUHJvbXB0LCB7XG4gICAgICAgICAgICAgIHdhaXRNZXNzYWdlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKS50cmltKCk7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbnMubWFwT3V0cHV0Py4oYWdlbnQsIG91dHB1dCkgPz8gYCMjICR7ZGlzcGxheUFnZW50TmFtZShhZ2VudCl9XFxuXFxuJHtvdXRwdXR9YDtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApLmZpbHRlcigob3V0cHV0KTogb3V0cHV0IGlzIHN0cmluZyA9PiBvdXRwdXQgIT09IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG91dHB1dHMubGVuZ3RoID4gMCA/IG91dHB1dHMuam9pbignXFxuXFxuJykgOiBOT19DT05DRVJOX01FU1NBR0U7XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BZ2VudENvbW1hbmQoXG4gIGFnZW50OiBBZ2VudE5hbWUsXG4gIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+LFxuICBvcHRpb25zOiBBZ2VudENvbW1hbmRPcHRpb25zID0ge31cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudCwgYXdhaXQgcHJvbXB0KSwge1xuICAgIGxvZ0ZpbGVQYXRoOiBhZ2VudExvZ0ZpbGVQYXRoKGFnZW50KSxcbiAgICB3YWl0TWVzc2FnZTogb3B0aW9ucy53YWl0TWVzc2FnZSA9PT0gdW5kZWZpbmVkID8gd2FpdE1lc3NhZ2VGb3IoZGlzcGxheUFnZW50TmFtZShhZ2VudCkpIDogb3B0aW9ucy53YWl0TWVzc2FnZSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudDogQWdlbnROYW1lLCBwcm9tcHQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4JzpcbiAgICAgIHJldHVybiBbJ25weCcsICctLXllcycsICdAb3BlbmFpL2NvZGV4QGxhdGVzdCcsICdleGVjJywgJy0tZGFuZ2Vyb3VzbHktYnlwYXNzLWFwcHJvdmFscy1hbmQtc2FuZGJveCcsIHByb21wdF07XG4gICAgY2FzZSAnY2xhdWRlJzpcbiAgICAgIHJldHVybiBbJ2NsYXVkZScsICctLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnMnLCAnLXAnLCBwcm9tcHRdO1xuICAgIGNhc2UgJ2dlbWluaSc6XG4gICAgICByZXR1cm4gW1xuICAgICAgICAnbnB4JyxcbiAgICAgICAgJy0teWVzJyxcbiAgICAgICAgJ0Bnb29nbGUvZ2VtaW5pLWNsaUBwcmV2aWV3JyxcbiAgICAgICAgJy0tYXBwcm92YWwtbW9kZScsXG4gICAgICAgICd5b2xvJyxcbiAgICAgICAgJy0tbW9kZWwnLFxuICAgICAgICAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldycsXG4gICAgICAgICctcCcsXG4gICAgICAgIHByb21wdCxcbiAgICAgIF07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BsYXlBZ2VudE5hbWUoYWdlbnQ6IEFnZW50TmFtZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAoYWdlbnQpIHtcbiAgICBjYXNlICdjb2RleCc6XG4gICAgICByZXR1cm4gJ0NvZGV4JztcbiAgICBjYXNlICdjbGF1ZGUnOlxuICAgICAgcmV0dXJuICdDbGF1ZGUgQ29kZSc7XG4gICAgY2FzZSAnZ2VtaW5pJzpcbiAgICAgIHJldHVybiAnR2VtaW5pIENMSSc7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2Uob3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIENPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVgudGVzdChvdXRwdXQpO1xufVxuXG5mdW5jdGlvbiB3YWl0TWVzc2FnZUZvcih0YXJnZXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgV2FpdGluZyBmb3IgJHt0YXJnZXR9IHRvIGZpbmlzaC5gO1xufVxuXG5mdW5jdGlvbiBhZ2VudExvZ0ZpbGVQYXRoKGFnZW50OiBBZ2VudE5hbWUpOiBzdHJpbmcge1xuICByZXR1cm4gYGxvZ3MvJHthZ2VudH0tJHt0aW1lc3RhbXBGb3JMb2dGaWxlKCl9LmxvZ2A7XG59XG5cbmZ1bmN0aW9uIHRpbWVzdGFtcEZvckxvZ0ZpbGUoKTogc3RyaW5nIHtcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgY29uc3QgW21vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kXSA9IFtcbiAgICBub3cuZ2V0TW9udGgoKSArIDEsXG4gICAgbm93LmdldERhdGUoKSxcbiAgICBub3cuZ2V0SG91cnMoKSxcbiAgICBub3cuZ2V0TWludXRlcygpLFxuICAgIG5vdy5nZXRTZWNvbmRzKCksXG4gIF0ubWFwKHR3b0RpZ2l0cyk7XG4gIHJldHVybiBgJHttb250aH0ke2RheX0tJHtob3VyfSR7bWludXRlfSR7c2Vjb25kfWA7XG59XG5cbmZ1bmN0aW9uIHR3b0RpZ2l0cyh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbn1cbiIsIi8qKlxuICogYGJsb2NrUXVvdGU6ICdsaXRlcmFsJ2A6IFVzZXMgYSBwaXBlIChgcHJvcDogfGApIHRvIHJlcHJlc2VudCBtdWx0aWxpbmUgc3RyaW5ncy5cbiAqIGBsaW5lV2lkdGg6IDBgOiBEaXNhYmxlcyBsaW5lIHdyYXBwaW5nLlxuICovXG5leHBvcnQgY29uc3QgeWFtbFN0cmluZ2lmeU9wdGlvbnMgPSB7IGJsb2NrUXVvdGU6ICdsaXRlcmFsJywgbGluZVdpZHRoOiAwIH0gYXMgY29uc3Q7XG4iLCJpbXBvcnQgeyBzcGF3biwgc3Bhd25TeW5jIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHN0ZGVyciBhcyBwcm9jZXNzU3RkZXJyLCBzdGRpbiBhcyBwcm9jZXNzU3RkaW4gfSBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgc2V0VGltZW91dCBhcyBzbGVlcCB9IGZyb20gJ25vZGU6dGltZXJzL3Byb21pc2VzJztcbmltcG9ydCB7IHN0cmluZ2lmeSBhcyBzdHJpbmdpZnlZYW1sIH0gZnJvbSAneWFtbCc7XG5pbXBvcnQgeyBjcmVhdGVQcm9jZXNzVGltZW91dCwgc3RyZWFtVG9UZXh0LCB0aW1lb3V0RXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IHlhbWxTdHJpbmdpZnlPcHRpb25zIH0gZnJvbSAnLi4veWFtbC5qcyc7XG5cbmV4cG9ydCB0eXBlIEpzb25PYmplY3QgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgdHlwZSBNZXRhZGF0YU5vZGUgPSB7XG4gIG51bWJlcjogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgUGFnZUluZm8gPSB7XG4gIGhhc05leHRQYWdlOiBib29sZWFuO1xuICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZUNvbm5lY3Rpb248VE5vZGU+ID0ge1xuICBub2RlczogVE5vZGVbXTtcbiAgcGFnZUluZm86IFBhZ2VJbmZvO1xufTtcblxudHlwZSBSdW5Db21tYW5kT3B0aW9ucyA9IHtcbiAgc3RkaW5EYXRhPzogc3RyaW5nO1xuICBhbGxvd2VkRXhpdENvZGVzPzogbnVtYmVyW107XG59O1xuXG5jb25zdCBHSF9SRVRSWV9NQVhfQVRURU1QVFMgPSAzO1xuY29uc3QgR0hfUkVUUllfQkFTRV9ERUxBWV9NUyA9IDEwMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9ncmVzcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhpdFdpdGhFcnJvcihtZXNzYWdlOiBzdHJpbmcsIGNvZGUgPSAxKTogbmV2ZXIge1xuICBwcm9jZXNzU3RkZXJyLndyaXRlKGAke21lc3NhZ2V9XFxuYCk7XG4gIHByb2Nlc3MuZXhpdChjb2RlKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRTdGRpblRleHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKHByb2Nlc3NTdGRpbi5pc1RUWSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gYXdhaXQgc3RyZWFtVG9UZXh0KHByb2Nlc3NTdGRpbik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUmVxdWlyZWRTdGRpblRleHQoZXJyb3JNZXNzYWdlID0gJ0Vycm9yOiBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRTdGRpblRleHQoKTtcbiAgaWYgKGlucHV0Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cbiAgZXhpdFdpdGhFcnJvcihlcnJvck1lc3NhZ2UsIDIpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQ29tbWFuZChjb21tYW5kOiBzdHJpbmdbXSwgb3B0aW9uczogUnVuQ29tbWFuZE9wdGlvbnMgPSB7fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGFsbG93ZWRFeGl0Q29kZXMgPSBvcHRpb25zLmFsbG93ZWRFeGl0Q29kZXMgPz8gW107XG5cbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gR0hfUkVUUllfTUFYX0FUVEVNUFRTOyBhdHRlbXB0ICs9IDEpIHtcbiAgICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgICAgZGV0YWNoZWQ6IHRydWUsXG4gICAgICBzdGRpbzogWydwaXBlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgIH0pO1xuICAgIGxldCBmYWlsdXJlTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxldCByZXRyeSA9IGZhbHNlO1xuICAgIGNvbnN0IHByb2Nlc3NUaW1lb3V0ID0gY3JlYXRlUHJvY2Vzc1RpbWVvdXQocHJvYyk7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChvcHRpb25zLnN0ZGluRGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb2Muc3RkaW4uZW5kKG9wdGlvbnMuc3RkaW5EYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Muc3RkaW4uZW5kKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFtzdGRvdXQsIHN0ZGVyciwgZXhpdENvZGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQpLFxuICAgICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRlcnIpLFxuICAgICAgICBuZXcgUHJvbWlzZTxudW1iZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgICBwcm9jLm9uY2UoJ2Nsb3NlJywgKGNvZGUpID0+IHJlc29sdmUoY29kZSA/PyAxKSk7XG4gICAgICAgIH0pLFxuICAgICAgXSk7XG4gICAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcblxuICAgICAgaWYgKHByb2Nlc3NUaW1lb3V0LnRpbWVkT3V0KCkpIHtcbiAgICAgICAgZmFpbHVyZU1lc3NhZ2UgPSB0aW1lb3V0RXJyb3JNZXNzYWdlKG91dHB1dCwgcHJvY2Vzc1RpbWVvdXQudGltZW91dE1zLCBjb21tYW5kKTtcbiAgICAgIH0gZWxzZSBpZiAoZXhpdENvZGUgPT09IDAgfHwgYWxsb3dlZEV4aXRDb2Rlcy5pbmNsdWRlcyhleGl0Q29kZSkpIHtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgIH0gZWxzZSBpZiAoaXNUcmFuc2llbnRHaEZhaWx1cmUoY29tbWFuZCwgZXhpdENvZGUsIG91dHB1dCkgJiYgYXR0ZW1wdCA8IEdIX1JFVFJZX01BWF9BVFRFTVBUUykge1xuICAgICAgICByZXRyeSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG91dHB1dCB8fCBgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZC5qb2luKCcgJyl9YDtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgcHJvY2Vzc1RpbWVvdXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAocmV0cnkpIHtcbiAgICAgIHByb2dyZXNzKGBUcmFuc2llbnQgR2l0SHViIENMSSBmYWlsdXJlOyByZXRyeWluZy4uLiAoYXR0ZW1wdCAke2F0dGVtcHR9IG9mICR7R0hfUkVUUllfTUFYX0FUVEVNUFRTIC0gMX0pYCk7XG4gICAgICBhd2FpdCBzbGVlcChHSF9SRVRSWV9CQVNFX0RFTEFZX01TICogYXR0ZW1wdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGZhaWx1cmVNZXNzYWdlKSB7XG4gICAgICBleGl0V2l0aEVycm9yKGZhaWx1cmVNZXNzYWdlKTtcbiAgICB9XG4gIH1cbiAgZXhpdFdpdGhFcnJvcihgQ29tbWFuZCBmYWlsZWQgYWZ0ZXIgJHtHSF9SRVRSWV9NQVhfQVRURU1QVFN9IGF0dGVtcHRzOiAke2NvbW1hbmQuam9pbignICcpfWApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2goYXJnczogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBydW5Db21tYW5kKFsnZ2gnLCAuLi5hcmdzXSwgeyBzdGRpbkRhdGEgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaEFsbG93RXhpdENvZGVzKFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgYWxsb3dlZEV4aXRDb2RlczogbnVtYmVyW10sXG4gIHN0ZGluRGF0YT86IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoWydnaCcsIC4uLmFyZ3NdLCB7IHN0ZGluRGF0YSwgYWxsb3dlZEV4aXRDb2RlcyB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRSZXBvUGFydHMoKTogUHJvbWlzZTxbc3RyaW5nLCBzdHJpbmddPiB7XG4gIGNvbnN0IG5hbWVXaXRoT3duZXIgPSAoYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ25hbWVXaXRoT3duZXInLCAnLS1qcScsICcubmFtZVdpdGhPd25lciddKSkudHJpbSgpO1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gbmFtZVdpdGhPd25lci5zcGxpdCgnLycsIDIpO1xuICBpZiAoIW93bmVyIHx8ICFuYW1lKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCByZXBvc2l0b3J5Jyk7XG4gIH1cbiAgcmV0dXJuIFtvd25lciwgbmFtZV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50UHJOdW1iZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIChhd2FpdCBnaChbJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ251bWJlcicsICctLWpxJywgJy5udW1iZXInXSkpLnRyaW0oKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdyYXBocWw8VCBleHRlbmRzIEpzb25PYmplY3Q+KFxuICBxdWVyeTogc3RyaW5nLFxuICB2YXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQ+ID0ge31cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBhcmdzID0gWydhcGknLCAnZ3JhcGhxbCcsICctRicsICdxdWVyeT1ALSddO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YXJzKSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLUYnLCBgJHtrZXl9PSR7dmFsdWV9YCk7XG4gIH1cblxuICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoYXdhaXQgZ2goYXJncywgcXVlcnkpKSBhcyBKc29uT2JqZWN0ICYgeyBlcnJvcnM/OiBBcnJheTx7IG1lc3NhZ2U/OiBzdHJpbmcgfT4gfTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UgYXMgVDtcbiAgfVxuXG4gIGNvbnN0IGVycm9yTWVzc2FnZXMgPSByZXNwb25zZS5lcnJvcnMubWFwKChlcnJvcikgPT4gZXJyb3IubWVzc2FnZSA/PyAnVW5rbm93biBHcmFwaFFMIGVycm9yJykuam9pbignXFxuJyk7XG4gIGV4aXRXaXRoRXJyb3IoYEdyYXBoUUwgQVBJIGVycm9yOlxcbiR7ZXJyb3JNZXNzYWdlc31gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHlhbWxEdW1wKGRhdGE6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5naWZ5WWFtbChkYXRhLCB5YW1sU3RyaW5naWZ5T3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ29weTxUPihkYXRhOiBUKTogVCB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKSBhcyBUO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZEF2YWlsYWJsZShjb21tYW5kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNwYXduU3luY1NhZmUoW2NvbW1hbmQsICctLXZlcnNpb24nXSkuZXhpdENvZGUgPT09IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGF3blN5bmNTYWZlKGNvbW1hbmQ6IHN0cmluZ1tdLCBzdGRpbkRhdGE/OiBzdHJpbmcpOiB7IGV4aXRDb2RlOiBudW1iZXI7IG91dHB1dDogc3RyaW5nIH0ge1xuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgaW5wdXQ6IHN0ZGluRGF0YSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBleGl0Q29kZTogcmVzdWx0LnN0YXR1cyA/PyAocmVzdWx0LmVycm9yID8gMSA6IDApLFxuICAgIG91dHB1dDogYCR7cmVzdWx0LnN0ZG91dCA/PyAnJ30ke3Jlc3VsdC5zdGRlcnIgPz8gJyd9YCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNUcmFuc2llbnRHaEZhaWx1cmUoY29tbWFuZDogc3RyaW5nW10sIGV4aXRDb2RlOiBudW1iZXIsIG91dHB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChjb21tYW5kWzBdICE9PSAnZ2gnIHx8IGV4aXRDb2RlID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIC8oSFRUUCA1MFswMjM0XVxcYnxXZSBoYWQgaXNzdWVzIHByb2R1Y2luZyB0aGUgcmVzcG9uc2UgdG8geW91ciByZXF1ZXN0KS9pLnRlc3Qob3V0cHV0KTtcbn1cbiIsImltcG9ydCB7IHN0ZGVyciBhcyBwcm9jZXNzU3RkZXJyIH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7IHNldFRpbWVvdXQgYXMgc2xlZXAgfSBmcm9tICdub2RlOnRpbWVycy9wcm9taXNlcyc7XG5pbXBvcnQgeyBzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgY3JlYXRlV2FpdFByb2dyZXNzLCBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5pbXBvcnQge1xuICBjb21tYW5kQXZhaWxhYmxlLFxuICBjdXJyZW50UHJOdW1iZXIsXG4gIGRlZXBDb3B5LFxuICBleGl0V2l0aEVycm9yLFxuICBnaEFsbG93RXhpdENvZGVzLFxuICBwcm9ncmVzcyxcbiAgc3Bhd25TeW5jU2FmZSxcbiAgeWFtbER1bXAsXG59IGZyb20gJy4vc2hhcmVkLmpzJztcblxuZXhwb3J0IGNvbnN0IFRFU1RfUkVMQVRFRF9QQVRURVJOID0gL1xcYnRlc3RcXGIvaTtcbmV4cG9ydCBjb25zdCBURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyA9IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTO1xuLy8gT25lIGh1bmRyZWQgMzYtc2Vjb25kIGNoZWNrcyBwcmVzZXJ2ZXMgdGhlIG1heGltdW0gb25lLWhvdXIgQ0kgd2FpdCBidWRnZXQuXG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUyA9IDEwMDtcbmNvbnN0IFRFU1RfQ0hFQ0tfV0FJVF9NRVNTQUdFID0gJ1dhaXRpbmcgZm9yIHRlc3QtcmVsYXRlZCB3b3JrZmxvd3MgdG8gZmluaXNoLic7XG5leHBvcnQgY29uc3QgWkVST19USU1FU1RBTVAgPSAnMDAwMS0wMS0wMVQwMDowMDowMFonO1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyA9IFtcbiAgJ2F0dGVtcHQnLFxuICAnY29uY2x1c2lvbicsXG4gICdjcmVhdGVkQXQnLFxuICAnZGF0YWJhc2VJZCcsXG4gICdkaXNwbGF5VGl0bGUnLFxuICAnZXZlbnQnLFxuICAnaGVhZEJyYW5jaCcsXG4gICdoZWFkU2hhJyxcbiAgJ2pvYnMnLFxuICAnbmFtZScsXG4gICdudW1iZXInLFxuICAnc3RhcnRlZEF0JyxcbiAgJ3N0YXR1cycsXG4gICd1cGRhdGVkQXQnLFxuICAndXJsJyxcbiAgJ3dvcmtmbG93TmFtZScsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBDaGVjayA9IHtcbiAgYnVja2V0Pzogc3RyaW5nO1xuICBjb21wbGV0ZWRBdD86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGV2ZW50Pzogc3RyaW5nO1xuICBsaW5rPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBzdGFydGVkQXQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogc3RyaW5nO1xuICB3b3JrZmxvdz86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIENpUmVzdWx0cyA9IHtcbiAgc3VtbWFyeToge1xuICAgIHRvdGFsOiBudW1iZXI7XG4gICAgcGFzczogbnVtYmVyO1xuICAgIGZhaWw6IG51bWJlcjtcbiAgICBwZW5kaW5nOiBudW1iZXI7XG4gICAgc2tpcHBpbmc6IG51bWJlcjtcbiAgICBjYW5jZWw6IG51bWJlcjtcbiAgfTtcbiAgY2hlY2tzOiBDaGVja1tdO1xufTtcblxuZXhwb3J0IHR5cGUgV29ya2Zsb3dDbGFzc2lmaWNhdGlvbiA9ICdmYWlsZWQnIHwgJ3J1bm5pbmcnIHwgJ3N1Y2Nlc3NmdWwnO1xuXG5leHBvcnQgdHlwZSBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQgPSB7XG4gIGNsYXNzaWZpY2F0aW9uOiBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uO1xuICBjaGVjazogQ2hlY2s7XG4gIGNoZWNrczogQ2hlY2tbXTtcbn07XG5cbnR5cGUgQ29tcGFjdFdvcmtmbG93UnVuID0ge1xuICBicmFuY2g/OiBzdHJpbmc7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGZhaWxlZF9zdGVwPzogc3RyaW5nO1xuICBqb2I/OiBzdHJpbmc7XG4gIGpvYl91cmw/OiBzdHJpbmc7XG4gIHJ1bl9pZD86IHN0cmluZztcbiAgcnVuX3VybD86IHN0cmluZztcbiAgc2hhPzogc3RyaW5nO1xuICB3b3JrZmxvdz86IHN0cmluZztcbn07XG5cbnR5cGUgV29ya2Zsb3dSdW5TdGVwID0ge1xuICBjb25jbHVzaW9uPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBudW1iZXI/OiBudW1iZXI7XG4gIHN0YXR1cz86IHN0cmluZztcbn07XG5cbnR5cGUgV29ya2Zsb3dSdW5Kb2IgPSB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGRhdGFiYXNlSWQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0YXR1cz86IHN0cmluZztcbiAgc3RlcHM/OiBXb3JrZmxvd1J1blN0ZXBbXTtcbiAgdXJsPzogc3RyaW5nO1xufTtcblxudHlwZSBXb3JrZmxvd1J1bkRldGFpbHMgPSB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGhlYWRCcmFuY2g/OiBzdHJpbmc7XG4gIGhlYWRTaGE/OiBzdHJpbmc7XG4gIGpvYnM/OiBXb3JrZmxvd1J1bkpvYltdO1xuICB1cmw/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4gPSAvXi4qP1xcdFVOS05PV04gU1RFUFxcdFxcZHs0fS1cXGR7Mn0tXFxkezJ9VFteWl0rWlxccyovO1xuY29uc3QgcnRrQXZhaWxhYmxlID0gY29tbWFuZEF2YWlsYWJsZSgncnRrJyk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsYXRlc3RQckNpUmVzdWx0cyhwck51bWJlcj86IHN0cmluZyk6IFByb21pc2U8Q2lSZXN1bHRzPiB7XG4gIGNvbnN0IGFyZ3MgPSBbJ3ByJywgJ2NoZWNrcyddO1xuICBpZiAocHJOdW1iZXIpIHtcbiAgICBhcmdzLnB1c2gocHJOdW1iZXIpO1xuICB9XG4gIGFyZ3MucHVzaCgnLS1qc29uJywgJ2J1Y2tldCxjb21wbGV0ZWRBdCxkZXNjcmlwdGlvbixldmVudCxsaW5rLG5hbWUsc3RhcnRlZEF0LHN0YXRlLHdvcmtmbG93Jyk7XG5cbiAgbGV0IGNoZWNrczogQ2hlY2tbXSA9IFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoYXJncywgWzhdKTtcbiAgICBjaGVja3MgPSByYXcudHJpbSgpLmxlbmd0aCA+IDAgPyAoSlNPTi5wYXJzZShyYXcpIGFzIENoZWNrW10pIDogW107XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIGNoZWNrcyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdW1tYXJ5ID0gY2hlY2tzLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+PigoY291bnRzLCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IGJ1Y2tldCA9IGNoZWNrLmJ1Y2tldCA/PyAnJztcbiAgICBjb3VudHNbYnVja2V0XSA9IChjb3VudHNbYnVja2V0XSA/PyAwKSArIDE7XG4gICAgcmV0dXJuIGNvdW50cztcbiAgfSwge30pO1xuXG4gIHJldHVybiB7XG4gICAgc3VtbWFyeToge1xuICAgICAgdG90YWw6IGNoZWNrcy5sZW5ndGgsXG4gICAgICBwYXNzOiBzdW1tYXJ5LnBhc3MgPz8gMCxcbiAgICAgIGZhaWw6IHN1bW1hcnkuZmFpbCA/PyAwLFxuICAgICAgcGVuZGluZzogc3VtbWFyeS5wZW5kaW5nID8/IDAsXG4gICAgICBza2lwcGluZzogc3VtbWFyeS5za2lwcGluZyA/PyAwLFxuICAgICAgY2FuY2VsOiBzdW1tYXJ5LmNhbmNlbCA/PyAwLFxuICAgIH0sXG4gICAgY2hlY2tzLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyhcbiAgcHJOdW1iZXI6IHN0cmluZyxcbiAgc2xlZXBGbjogKHNlY29uZHM6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiA9IHNsZWVwU2Vjb25kcyxcbiAgbGF0ZXN0Q2lSZXN1bHRzRm46IChwck51bWJlcj86IHN0cmluZykgPT4gQ2lSZXN1bHRzIHwgUHJvbWlzZTxDaVJlc3VsdHM+ID0gbGF0ZXN0UHJDaVJlc3VsdHMsXG4gIHdyaXRlUHJvZ3Jlc3NGbjogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCA9IChtZXNzYWdlKSA9PiBwcm9jZXNzU3RkZXJyLndyaXRlKG1lc3NhZ2UpXG4pOiBQcm9taXNlPFtDaVJlc3VsdHMsIG51bWJlciwgYm9vbGVhbl0+IHtcbiAgbGV0IGF0dGVtcHRzID0gMDtcbiAgbGV0IGNpUmVzdWx0cyA9IGF3YWl0IGxhdGVzdENpUmVzdWx0c0ZuKHByTnVtYmVyKTtcbiAgbGV0IHN0b3BXYWl0UHJvZ3Jlc3MgPSAoKSA9PiB7fTtcblxuICB0cnkge1xuICAgIGZvciAoOzspIHtcbiAgICAgIGNvbnN0IGNsYXNzaWZpZWRSZXN1bHRzID0gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzKTtcbiAgICAgIGNvbnN0IFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c10gPSBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoY2xhc3NpZmllZFJlc3VsdHMpO1xuXG4gICAgICBpZiAoT2JqZWN0LmtleXMoZmFpbGVkUmVzdWx0cykubGVuZ3RoID4gMCB8fCBPYmplY3Qua2V5cyhydW5uaW5nUmVzdWx0cykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbY2lSZXN1bHRzLCBhdHRlbXB0cywgZmFsc2VdO1xuICAgICAgfVxuICAgICAgaWYgKGF0dGVtcHRzID49IFRFU1RfQ0hFQ0tfV0FJVF9NQVhfQVRURU1QVFMpIHtcbiAgICAgICAgcmV0dXJuIFtjaVJlc3VsdHMsIGF0dGVtcHRzLCB0cnVlXTtcbiAgICAgIH1cblxuICAgICAgYXR0ZW1wdHMgKz0gMTtcbiAgICAgIGlmIChhdHRlbXB0cyA9PT0gMSkge1xuICAgICAgICBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKFxuICAgICAgICAgIFRFU1RfQ0hFQ0tfV0FJVF9NRVNTQUdFLFxuICAgICAgICAgIFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTLFxuICAgICAgICAgIHdyaXRlUHJvZ3Jlc3NGblxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYXdhaXQgc2xlZXBGbihURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyk7XG4gICAgICBjaVJlc3VsdHMgPSBhd2FpdCBsYXRlc3RDaVJlc3VsdHNGbihwck51bWJlcik7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHN0b3BXYWl0UHJvZ3Jlc3MoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzOiBDaVJlc3VsdHMpOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+IHtcbiAgY29uc3QgbGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3cgPSBjaVJlc3VsdHMuY2hlY2tzLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBDaGVja1tdPj4oKGdyb3VwZWRSZXN1bHRzLCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IHdvcmtmbG93S2V5ID0gY2hlY2sud29ya2Zsb3cgfHwgY2hlY2submFtZSB8fCAndW5rbm93bl93b3JrZmxvdyc7XG4gICAgZ3JvdXBlZFJlc3VsdHNbd29ya2Zsb3dLZXldID8/PSBbXTtcbiAgICBncm91cGVkUmVzdWx0c1t3b3JrZmxvd0tleV0ucHVzaChjaGVjayk7XG4gICAgcmV0dXJuIGdyb3VwZWRSZXN1bHRzO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhsYXRlc3RSZXN1bHRzQnlXb3JrZmxvdykubWFwKChbd29ya2Zsb3dLZXksIGNoZWNrc10pID0+IHtcbiAgICAgIGNvbnN0IGxhdGVzdEF0dGVtcHRDaGVja3MgPSBsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyhjaGVja3MpO1xuICAgICAgY29uc3QgZmlyc3RDaGVjayA9IGxhdGVzdEF0dGVtcHRDaGVja3NbMF07XG4gICAgICBpZiAoIWZpcnN0Q2hlY2spIHtcbiAgICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IG5vIGNoZWNrcyBmb3VuZCBmb3Igd29ya2Zsb3cgJHt3b3JrZmxvd0tleX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxhdGVzdENoZWNrID1cbiAgICAgICAgbGF0ZXN0QXR0ZW1wdENoZWNrcy5yZWR1Y2U8Q2hlY2sgfCB1bmRlZmluZWQ+KChjdXJyZW50TGF0ZXN0LCBjaGVjaykgPT4ge1xuICAgICAgICAgIGlmICghY3VycmVudExhdGVzdCkge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2spID4gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY3VycmVudExhdGVzdCkgPyBjaGVjayA6IGN1cnJlbnRMYXRlc3Q7XG4gICAgICAgIH0sIHVuZGVmaW5lZCkgPz8gZmlyc3RDaGVjaztcblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgd29ya2Zsb3dLZXksXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc2lmaWNhdGlvbjogd29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbihsYXRlc3RBdHRlbXB0Q2hlY2tzKSxcbiAgICAgICAgICBjaGVjazogbGF0ZXN0Q2hlY2ssXG4gICAgICAgICAgY2hlY2tzOiBsYXRlc3RBdHRlbXB0Q2hlY2tzLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9KVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKFxuICBjbGFzc2lmaWVkUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PlxuKTogW1JlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4sIFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD5dIHtcbiAgY29uc3QgZmFpbGVkUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiA9IHt9O1xuICBjb25zdCBydW5uaW5nUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiA9IHt9O1xuXG4gIGZvciAoY29uc3QgW3dvcmtmbG93S2V5LCByZXN1bHRdIG9mIE9iamVjdC5lbnRyaWVzKGNsYXNzaWZpZWRSZXN1bHRzKSkge1xuICAgIGlmIChyZXN1bHQuY2xhc3NpZmljYXRpb24gPT09ICdmYWlsZWQnKSB7XG4gICAgICBmYWlsZWRSZXN1bHRzW3dvcmtmbG93S2V5XSA9IHJlc3VsdDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAocmVzdWx0LmNsYXNzaWZpY2F0aW9uID09PSAncnVubmluZycgJiYgcmVzdWx0LmNoZWNrcy5zb21lKChjaGVjaykgPT4gdGVzdFJlbGF0ZWRDaGVjayhjaGVjaykpKSB7XG4gICAgICBydW5uaW5nUmVzdWx0c1t3b3JrZmxvd0tleV0gPSByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjazogQ2hlY2sgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBsaW5rID0gY2hlY2s/Lmxpbms7XG4gIGlmICghbGluaykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGxpbmsubWF0Y2goL1xcL2FjdGlvbnNcXC9ydW5zXFwvKFxcZCspLyk/LlsxXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdvcmtmbG93UnVuKHJ1bklkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkPiB7XG4gIGlmICghcnVuSWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcnVuSnNvbiA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydydW4nLCAndmlldycsIHJ1bklkLCAnLS1qc29uJywgV09SS0ZMT1dfUlVOX0pTT05fRklFTERTLmpvaW4oJywnKV0sIFsxXSk7XG4gIGlmIChydW5Kc29uLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShydW5Kc29uKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgcHJvY2Vzc1N0ZGVyci53cml0ZShgV2FybmluZzogQ291bGQgbm90IHBhcnNlIEpTT04gZm9yIHdvcmtmbG93IHJ1biAke3J1bklkfTogJHtlcnJvci5tZXNzYWdlfVxcbmApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdENoZWNrc0ZvcldvcmtmbG93KGNoZWNrczogQ2hlY2tbXSk6IENoZWNrW10ge1xuICBjb25zdCBncm91cHMgPSBjaGVja3MucmVkdWNlKChncm91cGVkQ2hlY2tzLCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IGtleSA9IHdvcmtmbG93QXR0ZW1wdEtleShjaGVjayk7XG4gICAgY29uc3QgZ3JvdXAgPSBncm91cGVkQ2hlY2tzLmdldChrZXkpO1xuICAgIGlmIChncm91cCkge1xuICAgICAgZ3JvdXAucHVzaChjaGVjayk7XG4gICAgICByZXR1cm4gZ3JvdXBlZENoZWNrcztcbiAgICB9XG4gICAgZ3JvdXBlZENoZWNrcy5zZXQoa2V5LCBbY2hlY2tdKTtcbiAgICByZXR1cm4gZ3JvdXBlZENoZWNrcztcbiAgfSwgbmV3IE1hcDxzdHJpbmcsIENoZWNrW10+KCkpO1xuXG4gIHJldHVybiBBcnJheS5mcm9tKGdyb3Vwcy52YWx1ZXMoKSkucmVkdWNlPENoZWNrW10+KChsYXRlc3RHcm91cCwgY3VycmVudEdyb3VwKSA9PiB7XG4gICAgaWYgKGxhdGVzdEdyb3VwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRHcm91cDtcbiAgICB9XG5cbiAgICByZXR1cm4gbGF0ZXN0R3JvdXBUaW1lc3RhbXAoY3VycmVudEdyb3VwKSA+IGxhdGVzdEdyb3VwVGltZXN0YW1wKGxhdGVzdEdyb3VwKSA/IGN1cnJlbnRHcm91cCA6IGxhdGVzdEdyb3VwO1xuICB9LCBbXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd0F0dGVtcHRLZXkoY2hlY2s6IENoZWNrKTogc3RyaW5nIHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjayk7XG4gIHJldHVybiBydW5JZCA/IGBydW46JHtydW5JZH1gIDogJ3Vua25vd25fcnVuJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24oY2hlY2tzOiBDaGVja1tdKTogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbiB7XG4gIGNvbnN0IGJ1Y2tldHMgPSBjaGVja3MubWFwKChjaGVjaykgPT4gY2hlY2suYnVja2V0ID8/ICcnKTtcbiAgaWYgKGJ1Y2tldHMuc29tZSgoYnVja2V0KSA9PiAhWydwYXNzJywgJ3NraXBwaW5nJywgJ3BlbmRpbmcnXS5pbmNsdWRlcyhidWNrZXQpKSkge1xuICAgIHJldHVybiAnZmFpbGVkJztcbiAgfVxuICBpZiAoYnVja2V0cy5pbmNsdWRlcygncGVuZGluZycpKSB7XG4gICAgcmV0dXJuICdydW5uaW5nJztcbiAgfVxuICByZXR1cm4gJ3N1Y2Nlc3NmdWwnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2s6IENoZWNrKTogc3RyaW5nIHtcbiAgY29uc3QgdGltZXN0YW1wID0gY2hlY2suY29tcGxldGVkQXQ7XG4gIGlmICghdGltZXN0YW1wIHx8IHRpbWVzdGFtcCA9PT0gWkVST19USU1FU1RBTVApIHtcbiAgICByZXR1cm4gY2hlY2suc3RhcnRlZEF0ID8/ICcnO1xuICB9XG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0UmVsYXRlZENoZWNrKGNoZWNrOiBDaGVjayk6IGJvb2xlYW4ge1xuICByZXR1cm4gW2NoZWNrLm5hbWUsIGNoZWNrLndvcmtmbG93XS5zb21lKCh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBURVNUX1JFTEFURURfUEFUVEVSTi50ZXN0KHZhbHVlKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcFNlY29uZHMoc2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHNsZWVwKHNlY29uZHMgKiAxMDAwKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrUHJDaSgpOiBQcm9taXNlPHsgb3V0cHV0OiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXIgfT4ge1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuXG4gIHByb2dyZXNzKCdGZXRjaGluZyBsYXRlc3QgQ0kgcmVzdWx0cy4uLicpO1xuICBjb25zdCBbY2lSZXN1bHRzLCB3YWl0QXR0ZW1wdHMsIHdhaXRUaW1lZE91dF0gPSBhd2FpdCB3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzKHByTnVtYmVyKTtcbiAgY29uc3QgY2xhc3NpZmllZExhdGVzdCA9IGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0cyk7XG4gIGNvbnN0IFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c10gPSBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoY2xhc3NpZmllZExhdGVzdCk7XG5cbiAgY29uc3QgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgc3VtbWFyeTogZGVlcENvcHkoY2lSZXN1bHRzLnN1bW1hcnkpLFxuICAgIHdhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrczogd2FpdEF0dGVtcHRzID4gMCxcbiAgICB0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF9hdHRlbXB0czogd2FpdEF0dGVtcHRzLFxuICAgIHRlc3RfcmVsYXRlZF9jaGVja193YWl0X3RpbWVkX291dDogd2FpdFRpbWVkT3V0LFxuICB9O1xuXG4gIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwKSB7XG4gICAgcGF5bG9hZC5mYWlsZWRfd29ya2Zsb3dzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhmYWlsZWRSZXN1bHRzKS5tYXAoYXN5bmMgKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4ge1xuICAgICAgICBjb25zdCBjb21wYWN0V29ya2Zsb3cgPSBhd2FpdCBjb21wYWN0V29ya2Zsb3dSZXN1bHQod29ya2Zsb3dLZXksIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY29tcGFjdFdvcmtmbG93LFxuICAgICAgICAgIC4uLmJ1aWxkRmFpbGVkV29ya2Zsb3dEZXRhaWxzKGF3YWl0IGZhaWxlZFdvcmtmbG93TG9nKHJlc3VsdC5jaGVjaykpLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLnRlc3Rfd29ya2Zsb3dfb3V0cHV0ID0gJ1RpbWVkIG91dCB3YWl0aW5nIGZvciB0ZXN0LXJlbGF0ZWQgd29ya2Zsb3dzIHRvIGZpbmlzaC4nO1xuICAgIHBheWxvYWQucnVubmluZ190ZXN0X3JlbGF0ZWRfd29ya2Zsb3dzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhydW5uaW5nUmVzdWx0cykubWFwKChbd29ya2Zsb3dLZXksIHJlc3VsdF0pID0+IGNvbXBhY3RXb3JrZmxvd1Jlc3VsdCh3b3JrZmxvd0tleSwgcmVzdWx0KSlcbiAgICApO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICByZXR1cm4geyBvdXRwdXQ6ICdBbGwgQ0kgd29ya2Zsb3dzIHBhc3NlZC5cXG4nLCBleGl0Q29kZTogMCB9O1xufVxuXG5mdW5jdGlvbiBsYXRlc3RHcm91cFRpbWVzdGFtcChjaGVja3M6IENoZWNrW10pOiBzdHJpbmcge1xuICByZXR1cm4gY2hlY2tzLnJlZHVjZSgobGF0ZXN0LCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrKTtcbiAgICByZXR1cm4gdGltZXN0YW1wID4gbGF0ZXN0ID8gdGltZXN0YW1wIDogbGF0ZXN0O1xuICB9LCAnJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbXBhY3RXb3JrZmxvd1Jlc3VsdChcbiAgd29ya2Zsb3dLZXk6IHN0cmluZyxcbiAgcmVzdWx0OiBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHRcbik6IFByb21pc2U8eyBjbGFzc2lmaWNhdGlvbjogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbiB9ICYgQ29tcGFjdFdvcmtmbG93UnVuPiB7XG4gIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsocmVzdWx0LmNoZWNrKTtcbiAgY29uc3QgcnVuID0gKGF3YWl0IHdvcmtmbG93UnVuKHJ1bklkKSkgYXMgV29ya2Zsb3dSdW5EZXRhaWxzIHwgdW5kZWZpbmVkO1xuICBjb25zdCBmYWlsZWRKb2IgPSBmYWlsZWRXb3JrZmxvd1J1bkpvYihydW4sIHN0cmluZ09yVW5kZWZpbmVkKHJlc3VsdC5jaGVjay5uYW1lKSk7XG4gIHJldHVybiB7XG4gICAgY2xhc3NpZmljYXRpb246IHJlc3VsdC5jbGFzc2lmaWNhdGlvbixcbiAgICB3b3JrZmxvdzogd29ya2Zsb3dLZXksXG4gICAgam9iOiBzdHJpbmdPclVuZGVmaW5lZChyZXN1bHQuY2hlY2submFtZSksXG4gICAgam9iX3VybDogc3RyaW5nT3JVbmRlZmluZWQoZmFpbGVkSm9iPy51cmwpLFxuICAgIGZhaWxlZF9zdGVwOiBmYWlsZWRXb3JrZmxvd1J1blN0ZXBOYW1lKGZhaWxlZEpvYiksXG4gICAgcnVuX2lkOiBydW5JZCxcbiAgICBydW5fdXJsOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LnVybCkgPz8gc3RyaW5nT3JVbmRlZmluZWQocmVzdWx0LmNoZWNrLmxpbmspLFxuICAgIGJyYW5jaDogc3RyaW5nT3JVbmRlZmluZWQocnVuPy5oZWFkQnJhbmNoKSxcbiAgICBzaGE6IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8uaGVhZFNoYSksXG4gICAgY29uY2x1c2lvbjogc3RyaW5nT3JVbmRlZmluZWQocnVuPy5jb25jbHVzaW9uKSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmFpbGVkV29ya2Zsb3dMb2coY2hlY2s6IENoZWNrKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjayk7XG4gIGlmICghcnVuSWQpIHtcbiAgICByZXR1cm4gJ0ZhaWxlZCBsYXRlc3QgcmVzdWx0IGhhcyBubyBHaXRIdWIgQWN0aW9ucyBydW4gbGluay4nO1xuICB9XG4gIHJldHVybiBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncnVuJywgJ3ZpZXcnLCBydW5JZCwgJy0tbG9nLWZhaWxlZCddLCBbMV0pO1xufVxuXG5mdW5jdGlvbiBidWlsZEZhaWxlZFdvcmtmbG93RGV0YWlscyhsb2c6IHN0cmluZyk6IHtcbiAgZmFpbGVkX2xvZzogc3RyaW5nO1xufSB7XG4gIHJldHVybiB7XG4gICAgZmFpbGVkX2xvZzogcmVmaW5lRmFpbGVkV29ya2Zsb3dMb2cobG9nKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVmaW5lRmFpbGVkV29ya2Zsb3dMb2cobG9nOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzYW5pdGl6ZWRJbnB1dCA9IHNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2coc3RyaXBWVENvbnRyb2xDaGFyYWN0ZXJzKGxvZykpO1xuICBpZiAoIXJ0a0F2YWlsYWJsZSkge1xuICAgIHJldHVybiBzYW5pdGl6ZWRJbnB1dDtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luY1NhZmUoWydydGsnLCAnbG9nJ10sIHNhbml0aXplZElucHV0KTtcbiAgcmV0dXJuIHJlc3VsdC5leGl0Q29kZSA9PT0gMCAmJiByZXN1bHQub3V0cHV0LnRyaW0oKS5sZW5ndGggPiAwXG4gICAgPyBzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nKHJlc3VsdC5vdXRwdXQpXG4gICAgOiBzYW5pdGl6ZWRJbnB1dDtcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyhsb2c6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBsb2dcbiAgICAuc3BsaXQoJ1xcbicpXG4gICAgLm1hcCgobGluZSkgPT4gbGluZS5yZXBsYWNlKEZBSUxFRF9MT0dfTElORV9QUkVGSVhfUEFUVEVSTiwgJycpKVxuICAgIC5qb2luKCdcXG4nKVxuICAgIC50cmltKCk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ09yVW5kZWZpbmVkKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gMCA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBmYWlsZWRXb3JrZmxvd1J1bkpvYihcbiAgcnVuOiBXb3JrZmxvd1J1bkRldGFpbHMgfCB1bmRlZmluZWQsXG4gIGpvYk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogV29ya2Zsb3dSdW5Kb2IgfCB1bmRlZmluZWQge1xuICBpZiAoIXJ1bj8uam9icyB8fCBydW4uam9icy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBydW4uam9icy5maW5kKChqb2IpID0+IGpvYi5uYW1lID09PSBqb2JOYW1lKSA/P1xuICAgIHJ1bi5qb2JzLmZpbmQoKGpvYikgPT4gam9iLmNvbmNsdXNpb24gPT09ICdmYWlsdXJlJykgPz9cbiAgICBydW4uam9icy5maW5kKChqb2IpID0+IGpvYi5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKVxuICApO1xufVxuXG5mdW5jdGlvbiBmYWlsZWRXb3JrZmxvd1J1blN0ZXBOYW1lKGpvYjogV29ya2Zsb3dSdW5Kb2IgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWpvYj8uc3RlcHMgfHwgam9iLnN0ZXBzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGpvYi5zdGVwcy5maW5kKChzdGVwKSA9PiBzdGVwLmNvbmNsdXNpb24gPT09ICdmYWlsdXJlJyk/Lm5hbWUgPz9cbiAgICBqb2Iuc3RlcHMuZmluZCgoc3RlcCkgPT4gc3RlcC5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKT8ubmFtZVxuICApO1xufVxuIiwiaW1wb3J0IHsgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50QmFzZUJyYW5jaCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gKGF3YWl0IGN1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2goKSkgPz8gKGF3YWl0IGN1cnJlbnREZWZhdWx0QnJhbmNoKCkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudERlZmF1bHRCcmFuY2goKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIHJlcXVpcmVOb25FbXB0eShcbiAgICAoXG4gICAgICBhd2FpdCBydW5Db21tYW5kV2l0aFByb2dyZXNzKFtcbiAgICAgICAgJ2doJyxcbiAgICAgICAgJ3JlcG8nLFxuICAgICAgICAndmlldycsXG4gICAgICAgICctLWpzb24nLFxuICAgICAgICAnZGVmYXVsdEJyYW5jaFJlZicsXG4gICAgICAgICctLXRlbXBsYXRlJyxcbiAgICAgICAgJ3t7LmRlZmF1bHRCcmFuY2hSZWYubmFtZX19JyxcbiAgICAgIF0pXG4gICAgKS50cmltKCksXG4gICAgJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGJyYW5jaCdcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGJhc2VCcmFuY2ggPSAoXG4gICAgICBhd2FpdCBydW5Db21tYW5kV2l0aFByb2dyZXNzKFsnZ2gnLCAncHInLCAndmlldycsICctLWpzb24nLCAnYmFzZVJlZk5hbWUnLCAnLS10ZW1wbGF0ZScsICd7ey5iYXNlUmVmTmFtZX19J10pXG4gICAgKS50cmltKCk7XG4gICAgcmV0dXJuIGJhc2VCcmFuY2gubGVuZ3RoID4gMCA/IGJhc2VCcmFuY2ggOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyhlcnJvcikpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0N1cnJlbnRQdWxsUmVxdWVzdE1pc3NpbmcoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIC9ubyBwdWxsIHJlcXVlc3RzPyBmb3VuZCBmb3IgYnJhbmNoL2kudGVzdChTdHJpbmcoZXJyb3IpKTtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZU5vbkVtcHR5KHZhbHVlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbiIsImltcG9ydCB7IGlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyB9IGZyb20gJy4uL3JlcG8vZGVmYXVsdEJyYW5jaC5qcyc7XG5pbXBvcnQge1xuICBjdXJyZW50UHJOdW1iZXIsXG4gIGN1cnJlbnRSZXBvUGFydHMsXG4gIGV4aXRXaXRoRXJyb3IsXG4gIGdoQWxsb3dFeGl0Q29kZXMsXG4gIGdyYXBocWwsXG4gIHR5cGUgSnNvbk9iamVjdCxcbiAgdHlwZSBNZXNzYWdlLFxuICB0eXBlIE1lc3NhZ2VDb25uZWN0aW9uLFxuICB0eXBlIE1ldGFkYXRhTm9kZSxcbiAgcHJvZ3Jlc3MsXG4gIHlhbWxEdW1wLFxufSBmcm9tICcuL3NoYXJlZC5qcyc7XG5cbnR5cGUgSXNzdWVNZXNzYWdlQ29tbWVudE5vZGUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbDtcbn07XG5cbnR5cGUgUHJSZXZpZXdOb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nIHwgbnVsbDtcbiAgc3RhdGU/OiBzdHJpbmcgfCBudWxsO1xuICBzdWJtaXR0ZWRBdD86IHN0cmluZyB8IG51bGw7XG4gIHVybDogc3RyaW5nO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbDtcbn07XG5cbnR5cGUgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgY29tbWVudHM/OiBNZXNzYWdlQ29ubmVjdGlvbjxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZT47XG4gICAgICAgIHJldmlld3M/OiBNZXNzYWdlQ29ubmVjdGlvbjxQclJldmlld05vZGU+O1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBJc3N1ZU1lc3NhZ2VzUmVzcG9uc2UgPSB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIGlzc3VlPzoge1xuICAgICAgICBjb21tZW50cz86IE1lc3NhZ2VDb25uZWN0aW9uPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlPjtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn07XG5cbnR5cGUgUHVsbFJlcXVlc3RNZXRhZGF0YVJlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IE1ldGFkYXRhTm9kZTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBJc3N1ZU1ldGFkYXRhUmVzcG9uc2UgPSB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIGlzc3VlPzogTWV0YWRhdGFOb2RlO1xuICAgIH07XG4gIH07XG59O1xuXG5jb25zdCBJU1NVRV9NRVNTQUdFU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgaXNzdWUobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IElTU1VFX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgaXNzdWUobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIG51bWJlclxuICAgICAgICB0aXRsZVxuICAgICAgICB1cmxcbiAgICAgICAgYm9keVxuICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBQUl9DT01NRU5UU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFBSX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIG51bWJlclxuICAgICAgICB0aXRsZVxuICAgICAgICB1cmxcbiAgICAgICAgYm9keVxuICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBQUl9SRVZJRVdTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgc3VibWl0dGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplSXNzdWVOdW1iZXIocmVmZXJlbmNlOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlcihyZWZlcmVuY2UsICdpc3N1ZScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUHJOdW1iZXIocmVmZXJlbmNlOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlcihyZWZlcmVuY2UsICdwdWxsIHJlcXVlc3QnKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoSXNzdWVNZXNzYWdlcyhpc3N1ZU51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBpc3N1ZU1lc3NhZ2VzKG93bmVyLCBuYW1lLCBub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZU51bWJlcikpO1xuICBwcm9ncmVzcyhgRmV0Y2hlZCBpc3N1ZSAjJHtpc3N1ZS5udW1iZXJ9IG1lc3NhZ2VzLmApO1xuICByZXR1cm4geWFtbER1bXAoeyBpc3N1ZSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoUHJNZXNzYWdlcyhwck51bWJlcj86IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc29sdmVkUHJOdW1iZXIgPSBwck51bWJlciA9PT0gdW5kZWZpbmVkID8gYXdhaXQgY3VycmVudFByTnVtYmVyKCkgOiBub3JtYWxpemVQck51bWJlcihwck51bWJlcik7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzKHJlc29sdmVkUHJOdW1iZXIpO1xuICBwcm9ncmVzcyhgRmV0Y2hlZCBwdWxsIHJlcXVlc3QgIyR7cHVsbFJlcXVlc3QubnVtYmVyfSBtZXNzYWdlcy5gKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgcHVsbF9yZXF1ZXN0OiBwdWxsUmVxdWVzdCB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBwck51bWJlck91dHB1dCA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydwcicsICd2aWV3JywgJy0tanNvbicsICdudW1iZXInLCAnLS1qcScsICcubnVtYmVyJ10sIFsxXSk7XG4gIGNvbnN0IHByTnVtYmVyID0gcHJOdW1iZXJPdXRwdXQudHJpbSgpO1xuICBpZiAoaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nKHByTnVtYmVyT3V0cHV0KSB8fCAhL15cXGQrJC8udGVzdChwck51bWJlcikpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcHVsbFJlcXVlc3QgPSBhd2FpdCBjdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMocHJOdW1iZXIpO1xuICByZXR1cm4geWFtbER1bXAoeyBwdWxsX3JlcXVlc3Q6IHB1bGxSZXF1ZXN0IH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMocHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICByZXR1cm4gYXdhaXQgcHJNZXNzYWdlcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0R2l0SHViUmVmZXJlbmNlTnVtYmVyKHJlZmVyZW5jZTogc3RyaW5nIHwgbnVtYmVyLCBsYWJlbDogJ2lzc3VlJyB8ICdwdWxsIHJlcXVlc3QnKTogc3RyaW5nIHtcbiAgY29uc3QgcmVmZXJlbmNlVGV4dCA9IFN0cmluZyhyZWZlcmVuY2UpLnRyaW0oKTtcbiAgaWYgKHJlZmVyZW5jZVRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6ICR7bGFiZWx9IHJlZmVyZW5jZSBpcyByZXF1aXJlZGAsIDIpO1xuICB9XG5cbiAgaWYgKC9eXFxkKyQvLnRlc3QocmVmZXJlbmNlVGV4dCkpIHtcbiAgICByZXR1cm4gcmVmZXJlbmNlVGV4dDtcbiAgfVxuXG4gIGNvbnN0IGtpbmRTZWdtZW50ID0gbGFiZWwgPT09ICdpc3N1ZScgPyAnaXNzdWVzJyA6ICdwdWxsJztcbiAgY29uc3QgbWF0Y2ggPSByZWZlcmVuY2VUZXh0Lm1hdGNoKFxuICAgIG5ldyBSZWdFeHAoYF5odHRwcz86Ly8oPzp3d3dcXFxcLik/Z2l0aHViXFxcXC5jb20vW14vXSsvW14vXSsvJHtraW5kU2VnbWVudH0vKFxcXFxkKykoPzovfCQpYClcbiAgKTtcbiAgaWYgKG1hdGNoPy5bMV0pIHtcbiAgICByZXR1cm4gbWF0Y2hbMV07XG4gIH1cblxuICBleGl0V2l0aEVycm9yKGBFcnJvcjogZXhwZWN0ZWQgYSBHaXRIdWIgJHtsYWJlbH0gbnVtYmVyIG9yIFVSTCwgcmVjZWl2ZWQgXCIke3JlZmVyZW5jZVRleHR9XCJgLCAyKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNzdWVNZXNzYWdlcyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGlzc3VlTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBmZXRjaE1ldGFkYXRhPElzc3VlTWV0YWRhdGFSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBJU1NVRV9RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogaXNzdWVOdW1iZXIsXG4gICAgbm91bjogJ2lzc3VlJyxcbiAgICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5pc3N1ZSxcbiAgfSk7XG4gIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSwgSXNzdWVNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IElTU1VFX01FU1NBR0VTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBpc3N1ZU51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/Lmlzc3VlPy5jb21tZW50cyxcbiAgICBtYXBOb2RlOiBjb21tZW50TWVzc2FnZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHsgLi4uaXNzdWUsIG1lc3NhZ2VzIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByTWVzc2FnZXMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgZmV0Y2hNZXRhZGF0YTxQdWxsUmVxdWVzdE1ldGFkYXRhUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIG5vdW46ICdwdWxsIHJlcXVlc3QnLFxuICAgIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0LFxuICB9KTtcbiAgY29uc3QgW2lzc3VlQ29tbWVudHMsIHJldmlld3NdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIHBySXNzdWVDb21tZW50cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICAgIHByUmV2aWV3cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICBdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnB1bGxSZXF1ZXN0LFxuICAgIG1lc3NhZ2VzOiBbLi4uaXNzdWVDb21tZW50cywgLi4ucmV2aWV3c10uc29ydChjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0KGxlZnQ6IE1lc3NhZ2UsIHJpZ2h0OiBNZXNzYWdlKTogbnVtYmVyIHtcbiAgY29uc3QgbGVmdENyZWF0ZWRBdCA9IHR5cGVvZiBsZWZ0LmNyZWF0ZWRBdCA9PT0gJ3N0cmluZycgPyBsZWZ0LmNyZWF0ZWRBdCA6ICcnO1xuICBjb25zdCByaWdodENyZWF0ZWRBdCA9IHR5cGVvZiByaWdodC5jcmVhdGVkQXQgPT09ICdzdHJpbmcnID8gcmlnaHQuY3JlYXRlZEF0IDogJyc7XG4gIHJldHVybiBsZWZ0Q3JlYXRlZEF0LmxvY2FsZUNvbXBhcmUocmlnaHRDcmVhdGVkQXQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcklzc3VlQ29tbWVudHMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgcmV0dXJuIGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8SXNzdWVNZXNzYWdlQ29tbWVudE5vZGUsIFB1bGxSZXF1ZXN0TWVzc2FnZXNSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBQUl9DT01NRU5UU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8uY29tbWVudHMsXG4gICAgbWFwTm9kZTogY29tbWVudE1lc3NhZ2UsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwclJldmlld3Mob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgcmV0dXJuIGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8UHJSZXZpZXdOb2RlLCBQdWxsUmVxdWVzdE1lc3NhZ2VzUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfUkVWSUVXU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8ucmV2aWV3cyxcbiAgICBtYXBOb2RlOiByZXZpZXdNZXNzYWdlLFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVNZXNzYWdlczxUTm9kZSwgVFJlc3BvbnNlIGV4dGVuZHMgSnNvbk9iamVjdD4oY29uZmlnOiB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIG93bmVyOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVtYmVyOiBzdHJpbmcgfCBudW1iZXI7XG4gIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZTogVFJlc3BvbnNlKSA9PiBNZXNzYWdlQ29ubmVjdGlvbjxUTm9kZT4gfCB1bmRlZmluZWQ7XG4gIG1hcE5vZGU6IChub2RlOiBUTm9kZSkgPT4gTWVzc2FnZTtcbn0pOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IG1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IGNvbmZpZy5zZWxlY3RDb25uZWN0aW9uKFxuICAgICAgYXdhaXQgZ3JhcGhxbDxUUmVzcG9uc2U+KGNvbmZpZy5xdWVyeSwge1xuICAgICAgICBvd25lcjogY29uZmlnLm93bmVyLFxuICAgICAgICBuYW1lOiBjb25maWcubmFtZSxcbiAgICAgICAgbnVtYmVyOiBOdW1iZXIoY29uZmlnLm51bWJlciksXG4gICAgICAgIGN1cnNvcixcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgIH1cblxuICAgIG1lc3NhZ2VzLnB1c2goLi4uY29ubmVjdGlvbi5ub2Rlcy5tYXAoY29uZmlnLm1hcE5vZGUpLmZpbHRlcihoYXNNZXNzYWdlQm9keSkpO1xuXG4gICAgaWYgKCFjb25uZWN0aW9uLnBhZ2VJbmZvLmhhc05leHRQYWdlKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZXM7XG4gICAgfVxuICAgIGN1cnNvciA9IGNvbm5lY3Rpb24ucGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaE1ldGFkYXRhPFRSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Q+KGNvbmZpZzoge1xuICBxdWVyeTogc3RyaW5nO1xuICBvd25lcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bWJlcjogc3RyaW5nIHwgbnVtYmVyO1xuICBub3VuOiBzdHJpbmc7XG4gIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2U6IFRSZXNwb25zZSkgPT4gTWV0YWRhdGFOb2RlIHwgdW5kZWZpbmVkO1xufSk6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IGNvbmZpZy5zZWxlY3RNZXRhZGF0YShcbiAgICBhd2FpdCBncmFwaHFsPFRSZXNwb25zZT4oY29uZmlnLnF1ZXJ5LCB7XG4gICAgICBvd25lcjogY29uZmlnLm93bmVyLFxuICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICBudW1iZXI6IE51bWJlcihjb25maWcubnVtYmVyKSxcbiAgICB9KVxuICApO1xuXG4gIGlmICghbWV0YWRhdGEpIHtcbiAgICBleGl0V2l0aEVycm9yKGBDb3VsZCBub3QgZmluZCAke2NvbmZpZy5ub3VufSAjJHtjb25maWcubnVtYmVyfSBpbiAke2NvbmZpZy5vd25lcn0vJHtjb25maWcubmFtZX0uYCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG51bWJlcjogbWV0YWRhdGEubnVtYmVyLFxuICAgIHRpdGxlOiBtZXRhZGF0YS50aXRsZSxcbiAgICB1cmw6IG1ldGFkYXRhLnVybCxcbiAgICBhdXRob3I6IG1ldGFkYXRhLmF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkLFxuICAgIGJvZHk6IG1ldGFkYXRhLmJvZHkgPz8gJycsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbW1lbnRNZXNzYWdlKGNvbW1lbnQ6IElzc3VlTWVzc2FnZUNvbW1lbnROb2RlKTogTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2NvbW1lbnQnLFxuICAgIGF1dGhvcjogY29tbWVudC5hdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCxcbiAgICBjcmVhdGVkQXQ6IGNvbW1lbnQuY3JlYXRlZEF0LFxuICAgIHVybDogY29tbWVudC51cmwsXG4gICAgYm9keTogY29tbWVudC5ib2R5LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXZpZXdNZXNzYWdlKHJldmlldzogUHJSZXZpZXdOb2RlKTogTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ3JldmlldycsXG4gICAgYXV0aG9yOiByZXZpZXcuYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQsXG4gICAgc3RhdGU6IHJldmlldy5zdGF0ZSA/PyB1bmRlZmluZWQsXG4gICAgY3JlYXRlZEF0OiByZXZpZXcuc3VibWl0dGVkQXQgPz8gdW5kZWZpbmVkLFxuICAgIHVybDogcmV2aWV3LnVybCxcbiAgICBib2R5OiByZXZpZXcuYm9keSA/PyAnJyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFzTWVzc2FnZUJvZHkobWVzc2FnZTogTWVzc2FnZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIG1lc3NhZ2UuYm9keSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZS5ib2R5Lmxlbmd0aCA+IDA7XG59XG4iLCJpbXBvcnQgeyBjdXJyZW50UHJOdW1iZXIsIGV4aXRXaXRoRXJyb3IsIGdoLCBwcm9ncmVzcywgcnVuQ29tbWFuZCwgeWFtbER1bXAgfSBmcm9tICcuL3NoYXJlZC5qcyc7XG5cbmV4cG9ydCB0eXBlIE9wZW5Qck9wdGlvbnMgPSB7XG4gIGJvZHk/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVXBkYXRlUHJPcHRpb25zID0ge1xuICBib2R5OiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblByKHsgYm9keSwgdGl0bGUgfTogT3BlblByT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaGVhZCA9IChhd2FpdCBydW5Db21tYW5kKFsnZ2l0JywgJ2JyYW5jaCcsICctLXNob3ctY3VycmVudCddKSkudHJpbSgpO1xuICBjb25zdCBiYXNlID0gKGF3YWl0IGdoKFsncmVwbycsICd2aWV3JywgJy0tanNvbicsICdkZWZhdWx0QnJhbmNoUmVmJywgJy0tanEnLCAnLmRlZmF1bHRCcmFuY2hSZWYubmFtZSddKSkudHJpbSgpO1xuXG4gIGlmICghaGVhZCkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgYnJhbmNoJyk7XG4gIH1cbiAgaWYgKCFiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgZGVmYXVsdCBicmFuY2gnKTtcbiAgfVxuICBpZiAoaGVhZCA9PT0gYmFzZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBjdXJyZW50IGJyYW5jaCBpcyB0aGUgZGVmYXVsdCBicmFuY2ggKCR7YmFzZX0pYCk7XG4gIH1cblxuICBjb25zdCBjcmVhdGVBcmdzID0gWydwcicsICdjcmVhdGUnLCAnLS1iYXNlJywgYmFzZSwgJy0taGVhZCcsIGhlYWQsICctLWZpbGwnXTtcbiAgaWYgKHRpdGxlKSB7XG4gICAgY3JlYXRlQXJncy5wdXNoKCctLXRpdGxlJywgdGl0bGUpO1xuICB9XG4gIGlmIChib2R5KSB7XG4gICAgY3JlYXRlQXJncy5wdXNoKCctLWJvZHktZmlsZScsICctJyk7XG4gIH1cblxuICBwcm9ncmVzcygnQ3JlYXRpbmcgcHVsbCByZXF1ZXN0Li4uJyk7XG4gIGF3YWl0IGdoKGNyZWF0ZUFyZ3MsIGJvZHkpO1xuXG4gIHJldHVybiB5YW1sRHVtcChcbiAgICBKU09OLnBhcnNlKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvciddKSlcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByKHsgYm9keSwgdGl0bGUgfTogVXBkYXRlUHJPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcyhgVXBkYXRpbmcgcHVsbCByZXF1ZXN0ICMke3ByTnVtYmVyfS4uLmApO1xuICByZXR1cm4gYXdhaXQgZWRpdFByKHByTnVtYmVyLCBbJy0tdGl0bGUnLCB0aXRsZSwgJy0tYm9keS1maWxlJywgJy0nXSwgYm9keSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGVkaXRQcihwck51bWJlcjogc3RyaW5nLCBlZGl0QXJnczogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGF3YWl0IGdoKFsncHInLCAnZWRpdCcsIHByTnVtYmVyLCAuLi5lZGl0QXJnc10sIHN0ZGluRGF0YSk7XG5cbiAgcmV0dXJuIHlhbWxEdW1wKFxuICAgIEpTT04ucGFyc2UoXG4gICAgICBhd2FpdCBnaChbXG4gICAgICAgICdwcicsXG4gICAgICAgICd2aWV3JyxcbiAgICAgICAgcHJOdW1iZXIsXG4gICAgICAgICctLWpzb24nLFxuICAgICAgICAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvcixib2R5JyxcbiAgICAgIF0pXG4gICAgKVxuICApO1xufVxuIiwiaW1wb3J0IHtcbiAgY3VycmVudFByTnVtYmVyLFxuICBjdXJyZW50UmVwb1BhcnRzLFxuICBleGl0V2l0aEVycm9yLFxuICBncmFwaHFsLFxuICBwcm9ncmVzcyxcbiAgcmVhZFJlcXVpcmVkU3RkaW5UZXh0LFxuICB5YW1sRHVtcCxcbn0gZnJvbSAnLi9zaGFyZWQuanMnO1xuXG50eXBlIFJldmlld0NvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgZGlmZkh1bms/OiBzdHJpbmcgfCBudWxsO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgUmV2aWV3VGhyZWFkTm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgaXNPdXRkYXRlZD86IGJvb2xlYW4gfCBudWxsO1xuICBwYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgbGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsTGluZT86IG51bWJlciB8IG51bGw7XG4gIHN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsU3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgY29tbWVudHM6IHtcbiAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICBwYWdlSW5mbzoge1xuICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgIH07XG4gIH07XG59O1xuXG5jb25zdCBSRVZJRVdfVEhSRUFEX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3VGhyZWFkcyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICBpc091dGRhdGVkXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgICBsaW5lXG4gICAgICAgICAgICBvcmlnaW5hbExpbmVcbiAgICAgICAgICAgIHN0YXJ0TGluZVxuICAgICAgICAgICAgb3JpZ2luYWxTdGFydExpbmVcbiAgICAgICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDApIHtcbiAgICAgICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgICAgIGRpZmZIdW5rXG4gICAgICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFJFVklFV19DT01NRU5UX1FVRVJZID0gYFxuICBxdWVyeSgkdGhyZWFkSWQ6IElEISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgbm9kZShpZDogJHRocmVhZElkKSB7XG4gICAgICAuLi4gb24gUHVsbFJlcXVlc3RSZXZpZXdUaHJlYWQge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgZGlmZkh1bmtcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdUaHJlYWRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgnRXJyb3I6IEpTT04gaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nKTtcbiAgY29uc3QgcGF5bG9hZCA9IHBhcnNlUmVwbHlJbnB1dChpbnB1dCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRSZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgW3RocmVhZElkLCBib2R5XSBvZiBPYmplY3QuZW50cmllcyhwYXlsb2FkLnJlcGxpZXMpKSB7XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWRSZXBsaWVzW3RocmVhZElkXSA9IGJvZHk7XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemVkUmVwbGllcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhcbiAgcXVlcnk6IHN0cmluZyxcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyLFxuICBvblRocmVhZDogKHRocmVhZDogUmV2aWV3VGhyZWFkTm9kZSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD5cbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IHJldmlld1RocmVhZHMgPSAoXG4gICAgICBhd2FpdCBncmFwaHFsPHtcbiAgICAgICAgZGF0YT86IHtcbiAgICAgICAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgICAgICAgcHVsbFJlcXVlc3Q/OiB7XG4gICAgICAgICAgICAgIHJldmlld1RocmVhZHM/OiB7XG4gICAgICAgICAgICAgICAgbm9kZXM6IFJldmlld1RocmVhZE5vZGVbXTtcbiAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9PihxdWVyeSwge1xuICAgICAgICBvd25lcixcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbnVtYmVyOiBOdW1iZXIocHJOdW1iZXIpLFxuICAgICAgICBjdXJzb3IsXG4gICAgICB9KVxuICAgICkuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3Q/LnJldmlld1RocmVhZHM7XG5cbiAgICBpZiAoIXJldmlld1RocmVhZHMpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoXG4gICAgICAgICdDb3VsZCBub3QgZmluZCByZXZpZXdUaHJlYWRzIGluIEdyYXBoUUwgcmVzcG9uc2UuIFRoZSBwdWxsIHJlcXVlc3QgbWF5IG5vdCBleGlzdCBvciB0aGVyZSB3YXMgYW4gQVBJIGVycm9yLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0aHJlYWQgb2YgcmV2aWV3VGhyZWFkcy5ub2Rlcykge1xuICAgICAgYXdhaXQgb25UaHJlYWQodGhyZWFkKTtcbiAgICB9XG5cbiAgICBpZiAoIXJldmlld1RocmVhZHMucGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3Vyc29yID0gcmV2aWV3VGhyZWFkcy5wYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzKFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXJcbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgaWRzOiBzdHJpbmdbXSA9IFtdO1xuICBhd2FpdCBwYWdpbmF0ZVJldmlld1RocmVhZHMoUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlksIG93bmVyLCBuYW1lLCBwck51bWJlciwgKHRocmVhZCkgPT4ge1xuICAgIGlmICghdGhyZWFkLmlzUmVzb2x2ZWQpIHtcbiAgICAgIGlkcy5wdXNoKHRocmVhZC5pZCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlkcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzKFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXJcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4ge1xuICBjb25zdCB0aHJlYWRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdID0gW107XG5cbiAgYXdhaXQgcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFJFVklFV19USFJFQURfUVVFUlksIG93bmVyLCBuYW1lLCBwck51bWJlciwgYXN5bmMgKHRocmVhZCkgPT4ge1xuICAgIGlmICh0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbW1lbnRzID0gdGhyZWFkLmNvbW1lbnRzLm5vZGVzLm1hcChub3JtYWxpemVDb21tZW50QXV0aG9yKTtcbiAgICBsZXQgcGFnZUluZm8gPSB0aHJlYWQuY29tbWVudHMucGFnZUluZm87XG4gICAgbGV0IGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG5cbiAgICB3aGlsZSAocGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIGNvbnN0IGNvbW1lbnRDb25uZWN0aW9uID0gKFxuICAgICAgICBhd2FpdCBncmFwaHFsPHtcbiAgICAgICAgICBkYXRhPzoge1xuICAgICAgICAgICAgbm9kZT86IHtcbiAgICAgICAgICAgICAgY29tbWVudHM/OiB7XG4gICAgICAgICAgICAgICAgbm9kZXM6IFJldmlld0NvbW1lbnROb2RlW107XG4gICAgICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9PihSRVZJRVdfQ09NTUVOVF9RVUVSWSwgeyB0aHJlYWRJZDogdGhyZWFkLmlkLCBjdXJzb3IgfSlcbiAgICAgICkuZGF0YT8ubm9kZT8uY29tbWVudHM7XG5cbiAgICAgIGlmICghY29tbWVudENvbm5lY3Rpb24pIHtcbiAgICAgICAgZXhpdFdpdGhFcnJvcihgQ291bGQgbm90IGZpbmQgY29tbWVudHMgaW4gR3JhcGhRTCByZXNwb25zZSBmb3IgdGhyZWFkICR7dGhyZWFkLmlkfS5gKTtcbiAgICAgIH1cblxuICAgICAgY29tbWVudHMucHVzaCguLi5jb21tZW50Q29ubmVjdGlvbi5ub2Rlcy5tYXAobm9ybWFsaXplQ29tbWVudEF1dGhvcikpO1xuICAgICAgcGFnZUluZm8gPSBjb21tZW50Q29ubmVjdGlvbi5wYWdlSW5mbztcbiAgICAgIGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhyZWFkcy5wdXNoKHtcbiAgICAgIGlkOiB0aHJlYWQuaWQsXG4gICAgICBpc1Jlc29sdmVkOiB0aHJlYWQuaXNSZXNvbHZlZCxcbiAgICAgIGlzT3V0ZGF0ZWQ6IHRocmVhZC5pc091dGRhdGVkLFxuICAgICAgcGF0aDogdGhyZWFkLnBhdGgsXG4gICAgICBsaW5lOiB0aHJlYWQubGluZSxcbiAgICAgIG9yaWdpbmFsTGluZTogdGhyZWFkLm9yaWdpbmFsTGluZSxcbiAgICAgIHN0YXJ0TGluZTogdGhyZWFkLnN0YXJ0TGluZSxcbiAgICAgIG9yaWdpbmFsU3RhcnRMaW5lOiB0aHJlYWQub3JpZ2luYWxTdGFydExpbmUsXG4gICAgICBjb21tZW50cyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRocmVhZHM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0UHJSZXZpZXdUaHJlYWRzKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoJ0ZldGNoaW5nIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMuLi4nKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgdW5yZXNvbHZlZF90aHJlYWRzOiBhd2FpdCB1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcbiAgY29uc3QgdW5yZXNvbHZlZElkcyA9IG5ldyBTZXQoYXdhaXQgdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpKTtcblxuICBwcm9ncmVzcyhgUmVwbHlpbmcgdG8gJHtPYmplY3Qua2V5cyhyZXBsaWVzKS5sZW5ndGh9IHJldmlldyB0aHJlYWRzLi4uYCk7XG5cbiAgY29uc3QgcmVzb2x2ZWRUaHJlYWRJZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhyZXBsaWVzKTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgW3RocmVhZElkLCBib2R5XV0gb2YgZW50cmllcy5lbnRyaWVzKCkpIHtcbiAgICBwcm9ncmVzcyhgUHJvY2Vzc2luZyAke2luZGV4ICsgMX0vJHtlbnRyaWVzLmxlbmd0aH06ICR7dGhyZWFkSWR9YCk7XG4gICAgaWYgKCF1bnJlc29sdmVkSWRzLmhhcyh0aHJlYWRJZCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ3JhcGhxbDx7XG4gICAgICBkYXRhPzoge1xuICAgICAgICByZXNvbHZlUmV2aWV3VGhyZWFkPzoge1xuICAgICAgICAgIHRocmVhZD86IHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICBpc1Jlc29sdmVkOiBib29sZWFuO1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH0+KFxuICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkdGhyZWFkSWQ6IElEISwgJGJvZHk6IFN0cmluZyEpIHtcbiAgICAgICAgICBhZGRQdWxsUmVxdWVzdFJldmlld1RocmVhZFJlcGx5KGlucHV0OiB7cHVsbFJlcXVlc3RSZXZpZXdUaHJlYWRJZDogJHRocmVhZElkLCBib2R5OiAkYm9keX0pIHtcbiAgICAgICAgICAgIGNvbW1lbnQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZVJldmlld1RocmVhZChpbnB1dDoge3RocmVhZElkOiAkdGhyZWFkSWR9KSB7XG4gICAgICAgICAgICB0aHJlYWQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgeyB0aHJlYWRJZCwgYm9keSB9XG4gICAgKTtcblxuICAgIGlmIChyZXNwb25zZS5kYXRhPy5yZXNvbHZlUmV2aWV3VGhyZWFkPy50aHJlYWQ/LmlzUmVzb2x2ZWQpIHtcbiAgICAgIHJlc29sdmVkVGhyZWFkSWRzLnB1c2godGhyZWFkSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9ncmVzcyhgV2FybmluZzogZmFpbGVkIHRvIHJlc29sdmUgdGhyZWFkICR7dGhyZWFkSWR9LmApO1xuICAgIH1cbiAgfVxuXG4gIHByb2dyZXNzKCdEb25lLicpO1xuICByZXR1cm4geWFtbER1bXAoeyByZXNvbHZlZF90aHJlYWRfaWRzOiByZXNvbHZlZFRocmVhZElkcyB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tbWVudEF1dGhvcihjb21tZW50OiBSZXZpZXdDb21tZW50Tm9kZSk6IFJldmlld0NvbW1lbnROb2RlICYgeyBhdXRob3I/OiBzdHJpbmcgfCBudWxsIH0ge1xuICByZXR1cm4ge1xuICAgIC4uLmNvbW1lbnQsXG4gICAgYXV0aG9yOiB0eXBlb2YgY29tbWVudC5hdXRob3IgPT09ICdzdHJpbmcnID8gY29tbWVudC5hdXRob3IgOiAoY29tbWVudC5hdXRob3I/LmxvZ2luID8/IG51bGwpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlcGx5SW5wdXQoaW5wdXQ6IHN0cmluZyk6IHsgcmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGNvbnN0IGVycm9yUHJlZml4ID0gJ0Vycm9yOiBJbnZhbGlkIGlucHV0IGZvcm1hdCBvbiBzdGRpbic7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGlucHV0KSBhcyB1bmtub3duO1xuICAgIGlmICghaXNSZXBseUlucHV0KHBhcnNlZCkpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoYCR7ZXJyb3JQcmVmaXh9OiBleHBlY3RlZCBhbiBvYmplY3Qgd2l0aCBhIHN0cmluZy12YWx1ZWQgXFxgcmVwbGllc1xcYCBtYXBgLCAyKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IEludmFsaWQgSlNPTiBwcm92aWRlZCBvbiBzdGRpbjogJHtlcnJvci5tZXNzYWdlfWAsIDIpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1JlcGx5SW5wdXQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyB7IHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IH0ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJlcGxpZXMgPSAodmFsdWUgYXMgeyByZXBsaWVzPzogdW5rbm93biB9KS5yZXBsaWVzO1xuICBpZiAodHlwZW9mIHJlcGxpZXMgIT09ICdvYmplY3QnIHx8IHJlcGxpZXMgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShyZXBsaWVzKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QudmFsdWVzKHJlcGxpZXMpLmV2ZXJ5KChyZXBseSkgPT4gcmVwbHkgPT09IG51bGwgfHwgcmVwbHkgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgcmVwbHkgPT09ICdzdHJpbmcnKTtcbn1cbiIsImltcG9ydCB7IGZldGNoSXNzdWVNZXNzYWdlcyB9IGZyb20gJy4uL3ByL3ByQ29tbWFuZHMuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRQbGFuUHJvbXB0KGlzc3VlTnVtYmVyOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBpc3N1ZVlhbWwgPSBhd2FpdCBmZXRjaElzc3VlTWVzc2FnZXMoaXNzdWVOdW1iZXIpO1xuXG4gIHJldHVybiBgXG5QbGFuIGEgR2l0SHViIGlzc3VlIGJ5IGdhdGhlcmluZyBjb250ZXh0LCB3cml0aW5nIGEgc3BlY2lmaWNhdGlvbiBmb3Igc29mdHdhcmUgZW5naW5lZXJzLCBhbmQgcG9zdGluZyBvciB1cGRhdGluZyB0aGF0IHNwZWNpZmljYXRpb24gYmFjayB0byB0aGUgaXNzdWUuXG5UaGUgdGFyZ2V0IGlzc3VlIG51bWJlciBpcyAjJHtpc3N1ZU51bWJlcn0uIEhlcmUgaXMgdGhlIGZldGNoZWQgaXNzdWUgY29udGV4dCBhcyBZQU1MOlxufn5+fnlhbWxcbiR7aXNzdWVZYW1sLnRyaW0oKX1cbn5+fn5cblxuRm9sbG93IHRoaXMgd29ya2Zsb3c6XG4xLiBSZWFkIHRoZSBhYm92ZSBpc3N1ZSBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBjYXJlZnVsbHkuXG4yLiBDb2xsZWN0IGVub3VnaCBzdXBwb3J0aW5nIGluZm9ybWF0aW9uIGJlZm9yZSB3cml0aW5nIHRoZSBzcGVjaWZpY2F0aW9uOlxuICAgLSBJbnNwZWN0IHRoZSByZWxldmFudCBjb2RlLCBzdXJyb3VuZGluZyBjYWxsIHNpdGVzLCByZWxhdGVkIHR5cGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbiwgcmVjZW50IGRpZmZzLCBhbmQgYW55IG90aGVyIGxvY2FsIGNvbnRleHQgbmVlZGVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZS5cbiAgIC0gSWYgY29kZSBpbnNwZWN0aW9uIGlzIGVub3VnaCwgdXNlIHRoZSBjdXJyZW50IGNvZGViYXNlIGFzIHRoZSBwcmltYXJ5IGV2aWRlbmNlLlxuICAgLSBJZiB0aGUgaXNzdWUgZGVwZW5kcyBvbiBydW50aW1lIGJlaGF2aW9yLCByZXByb2R1Y2UgaXQgd2l0aCB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGV4cGVyaW1lbnQsIHN1Y2ggYXMgYSBmb2N1c2VkIGNvbW1hbmQsIGEgdGlueSBzY3JpcHQsIGEgdGVtcG9yYXJ5IGxvY2FsIGFzc2VydGlvbiwgb3IgYW5vdGhlciBuYXJyb3cgY2hlY2sgdGhhdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGludGVuZGVkIGJlaGF2aW9yLlxuICAgICAtIENsZWFuIHVwIGFueSB0ZW1wb3JhcnkgZmlsZXMgYWZ0ZXIgdGhlIGV4cGVyaW1lbnQuXG4gICAtIElmIHRoZSBpc3N1ZSBkZXBlbmRzIG9uIGEgbGlicmFyeSwgQVBJLCBvciBsYW5ndWFnZSBmZWF0dXJlLCBjb25maXJtIGl0IGFnYWluc3QgdGhlIGxhdGVzdCBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIG9yIGFub3RoZXIgcHJpbWFyeSBzb3VyY2UgaW5zdGVhZCBvZiByZWx5aW5nIG9uIG1lbW9yeS5cbjMuIFdyaXRlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgaXNzdWUgY29tbWVudC5cbiAgIC0gV3JpdGUgdGhlIGJhY2tncm91bmQgYmFzZWQgb24gdGhlIGNvbGxlY3RlZCBpbmZvcm1hdGlvbi5cbiAgIC0gRGVmaW5lIGEgZ29hbCB0aGF0IGNsZWFybHkgZ3VpZGVzIG91ciBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLlxuICAgLSBXcml0ZSBhIGRldGFpbGVkIHNwZWNpZmljYXRpb24gaW5jb3Jwb3JhdGluZyB0aGUgZXZpZGVuY2UgeW91IGNvbGxlY3RlZC5cbiAgIC0gSWYgbmVlZGVkLCBpbmNsdWRlIGNvZGUgc25pcHBldHMgdGhhdCBleHBsYWluIGhvdyB0byB1c2UgbGlicmFyaWVzIG9yIEFQSXMsIGFsb25nIHdpdGggcmVmZXJlbmNlcyB0byB0aGVpciBkb2N1bWVudGF0aW9uLlxuNC4gUG9zdCB0aGUgc3BlY2lmaWNhdGlvbiBiYWNrIHRvIGlzc3VlICMke2lzc3VlTnVtYmVyfSwgdGhlbiBwcmludCB0aGUgaXNzdWUgVVJMLlxuICAgLSBJZiB0aGUgaXNzdWUgYWxyZWFkeSBoYXMgYSBzcGVjaWZpY2F0aW9uLCB1cGRhdGUgdGhlIGV4aXN0aW5nIGNvbW1lbnQgaW5zdGVhZCBvZiBwb3N0aW5nIGEgbmV3IG9uZS5cblxuRm9ybWF0IHRoZSBpc3N1ZSBjb21tZW50IGV4YWN0bHkgbGlrZSB0aGlzLCBidXQgZG8gbm90IGluY2x1ZGUgdGhlIHN1cnJvdW5kaW5nIFxcYH5+fn5cXGAgZmVuY2VzIGluIHRoZSBhY3R1YWwgY29tbWVudDpcbn5+fn5cbiMjIEJhY2tncm91bmRcblxuW1N1bW1hcml6ZSB0aGUgY3VycmVudCBiZWhhdmlvciBhbmQgZXhwbGFpbiB0aGUgbW90aXZhdGlvbiBiZWhpbmQgdGhpcyBpc3N1ZV1cblxuIyMgR29hbFxuXG5bRGVmaW5lIHRoZSBnb2FsIHdlIHdhbnQgdG8gYWNoaWV2ZSBpbiB0aGlzIGlzc3VlXVxuXG4jIyBTcGVjaWZpY2F0aW9uXG5cbltEZXRhaWxlZCBzcGVjaWZpY2F0aW9uIGZvciBzb2Z0d2FyZSBlbmdpbmVlcnNdXG5cbiMjIEtleSBUZWNobm9sb2dpZXMgKE9OTFkgaWYgZXh0ZXJuYWwgcmVzb3VyY2VzIGFyZSBuZWVkZWQpXG5cbltEZXNjcmliZSB3aGF0IGxpYnJhcmllcyBvciBBUElzIHdlIHNob3VsZCB1c2UsIGluY2x1ZGluZyBjb25jcmV0ZSB2ZXJzaW9ucyBhbmQgY29kZSBzbmlwcGV0cy5dXG5cbn5+fn5cbmAudHJpbSgpO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZChiYXNlQnJhbmNoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYGdpdCBtZXJnZS1iYXNlICR7c2hlbGxRdW90ZShgb3JpZ2luLyR7YmFzZUJyYW5jaH1gKX0gSEVBRCAyPi9kZXYvbnVsbCB8fCBnaXQgbWVyZ2UtYmFzZSAke3NoZWxsUXVvdGUoYmFzZUJyYW5jaCl9IEhFQURgO1xufVxuXG5mdW5jdGlvbiBzaGVsbFF1b3RlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCcke3ZhbHVlLnJlcGxhY2VBbGwoXCInXCIsIFwiJ1xcXCInXFxcIidcIil9J2A7XG59XG4iLCJpbXBvcnQgeyBmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUgfSBmcm9tICcuLi9wci9wckNvbW1hbmRzLmpzJztcbmltcG9ydCB7IGN1cnJlbnRCYXNlQnJhbmNoIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSB9IGZyb20gJy4uL3Jldmlldy9ub0NvbmNlcm4uanMnO1xuaW1wb3J0IHsgYnVpbGRNZXJnZUJhc2VDb21tYW5kIH0gZnJvbSAnLi9iYXNlQnJhbmNoRGlmZkNvbW1hbmQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRSZXZpZXdQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYmFzZUJyYW5jaCA9IGF3YWl0IGN1cnJlbnRCYXNlQnJhbmNoKCk7XG4gIGNvbnN0IG1lcmdlQmFzZUNvbW1hbmQgPSBidWlsZE1lcmdlQmFzZUNvbW1hbmQoYmFzZUJyYW5jaCk7XG4gIGNvbnN0IHByQ29udGV4dCA9IGF3YWl0IGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSgpO1xuICByZXR1cm4gYFxuUmV2aWV3IHRoZSBjdXJyZW50ICR7cHJDb250ZXh0ID8gJ3B1bGwgcmVxdWVzdCcgOiAnYnJhbmNoJ30gYWdhaW5zdCBpdHMgYmFzZSBicmFuY2ggJHtiYXNlQnJhbmNofSB2aWEgXFxgZ2l0IGRpZmYgXCIkKCR7bWVyZ2VCYXNlQ29tbWFuZH0pXCJcXGAuXG5Gb3IgZWFjaCBmaW5kaW5nLCBkbyB0aGUgZm9sbG93aW5nIHRocmVlIHN0ZXBzOlxuMS4gR2F0aGVyIHN1cHBvcnRpbmcgZXZpZGVuY2U6XG4gICAtIEluc3BlY3QgdGhlIHJlZmVyZW5jZWQgY29kZSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCBhbmQgcmVjZW50IGRpZmZzIHdoZW4gdGhleSBhZmZlY3QgdGhlIGNsYWltLlxuICAgLSBJZiBjb2RlIGluc3BlY3Rpb24gaXMgZW5vdWdoLCB1c2UgdGhlIGN1cnJlbnQgY29kZWJhc2UgYXMgdGhlIHByaW1hcnkgZXZpZGVuY2UuXG4gICAtIElmIHRoZSBmaW5kaW5nIGlzIGFib3V0IHJ1bnRpbWUgYmVoYXZpb3IsIHJlcHJvZHVjZSBpdCB3aXRoIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgZXhwZXJpbWVudCwgc3VjaCBhcyBhIGZvY3VzZWQgY29tbWFuZCwgYSB0aW55IHNjcmlwdCwgYSB0ZW1wb3JhcnkgbG9jYWwgYXNzZXJ0aW9uLCBvciBhbm90aGVyIG5hcnJvdyBjaGVjayB0aGF0IGRvZXMgbm90IGNoYW5nZSB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuXG4gICAgIC0gQ2xlYW4gdXAgYW55IHRlbXBvcmFyeSBmaWxlcyBhZnRlciB0aGUgZXhwZXJpbWVudC5cbiAgIC0gSWYgdGhlIGZpbmRpbmcgZGVwZW5kcyBvbiBmcmFtZXdvcmssIGxpYnJhcnksIHBsYXRmb3JtLCBvciBsYW5ndWFnZSBiZWhhdmlvciwgY29uZmlybSBpdCBhZ2FpbnN0IHRoZSBsYXRlc3Qgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBvciBhbm90aGVyIHByaW1hcnkgc291cmNlIGluc3RlYWQgb2YgcmVseWluZyBvbiBtZW1vcnkuXG4yLiBKdWRnZSB3aGV0aGVyIHRoZSBmaW5kaW5nIGlzIHZhbGlkOlxuICAgLSBNYXJrIGl0IHZhbGlkIG9ubHkgd2hlbiB0aGUgYXZhaWxhYmxlIGV2aWRlbmNlIHNob3dzIHRoZSByZXBvcnRlZCBpc3N1ZSBpcyBzdGlsbCByZWFsIGluIHRoZSBjdXJyZW50IGNvZGViYXNlLlxuICAgLSBPdGhlcndpc2UsIG1hcmsgaXQgbm90IHZhbGlkLlxuMy4gUHJvcG9zZSBhIGZpeCB3aXRob3V0IG1vZGlmeWluZyB0aGUgY29kZTpcbiAgIC0gRGVzY3JpYmUgdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBjaGFuZ2UgdGhhdCB3b3VsZCBhZGRyZXNzIHRoZSBmaW5kaW5nLlxuICAgLSBJbnZlc3RpZ2F0ZSB0aGUgbGlrZWx5IGltcGFjdCBvZiB0aGF0IGNoYW5nZSBieSBpbnNwZWN0aW5nIHRoZSBhZmZlY3RlZCBjYWxsIHNpdGVzLCByZWxhdGVkIHR5cGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbiwgYW5kIGFkamFjZW50IGJlaGF2aW9yLCBhbmQgbm90ZSBhbnkgZm9sbG93LXVwIGNoYW5nZXMgb3Igcmlza3MgdGhlIGZpeCB3b3VsZCBuZWVkIHRvIGFjY291bnQgZm9yLlxuXG5SZXBvcnQgb25seSB0aGUgdmFsaWQgZmluZGluZ3MsIHRoZSBldmlkZW5jZSBmb3IgZWFjaCBvbmUsIGFuZCB0aGUgcHJvcG9zZWQgZml4IHdpdGggaXRzIGxpa2VseSBpbXBhY3QuIEluY2x1ZGUgYSBicmllZiBqdXN0aWZpY2F0aW9uIGZvciBlYWNoLCBjaXRpbmcgdGhlIGV2aWRlbmNlIHVzZWQgKGUuZy4sIGEgZmFpbGluZyBzY2VuYXJpbywgZXhwZXJpbWVudCByZXN1bHQsIG9yIG9mZmljaWFsIGRvY3VtZW50YXRpb24pLiBEbyBub3QgbW9kaWZ5IHRoZSBjb2RlLlxuSWYgdGhlcmUgYXJlIG5vIHZhbGlkIGZpbmRpbmdzLCByZXNwb25kIGV4YWN0bHkgd2l0aDogXFxgJHtOT19DT05DRVJOX01FU1NBR0V9XFxgXG5cbiR7YnVpbGRQckNvbnRleHRJbnN0cnVjdGlvbnMocHJDb250ZXh0KX1cbmAudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBidWlsZFByQ29udGV4dEluc3RydWN0aW9ucyhwckNvbnRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIHJldHVybiBwckNvbnRleHRcbiAgICA/IGBDdXJyZW50IHB1bGwgcmVxdWVzdCBjb250ZXh0Olxufn5+fnlhbWxcbiR7cHJDb250ZXh0LnRyaW0oKX1cbn5+fn5cbmAudHJpbSgpXG4gICAgOiAnJztcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBidWlsZFNjcmVlbnNob3RQcm9tcHQoaW5pdGlhbFVybDogc3RyaW5nLCBwYWdlTmFtZTogc3RyaW5nLCBzY3JlZW5zaG90RGVzY3JpcHRpb246IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNhbml0aXplZERlc2NyaXB0aW9uID0gc2NyZWVuc2hvdERlc2NyaXB0aW9uLnJlcGxhY2VBbGwoJ1xcbicsICcgJykucmVwbGFjZUFsbCgnXCInLCBcIidcIik7XG4gIHJldHVybiBgXG5Vc2UgXFxgcGxheXdyaWdodC1jbGlcXGAgc2tpbGwgdG8gdGFrZSBhIHNjcmVlbnNob3Qgb2YgXCIke3Nhbml0aXplZERlc2NyaXB0aW9ufVwiIGJ5IG5hdmlnYXRpbmcgZnJvbSAke2luaXRpYWxVcmx9IHRvIFwiJHtwYWdlTmFtZX1cIiBwYWdlLlxuXG5Gb2xsb3cgdGhpcyB3b3JrZmxvdzpcbjEuIE9wZW4gdGhlIGluaXRpYWwgcGFnZSBhdCAke2luaXRpYWxVcmx9LlxuMi4gTmF2aWdhdGUgZnJvbSB0aGF0IGluaXRpYWwgcGFnZSB1bnRpbCB5b3UgcmVhY2ggdGhlIHBhZ2UgaWRlbnRpZmllZCBhcyAke3BhZ2VOYW1lfS5cbiAgIC0gSWYgY29kZSBlcnJvcnMsIHJ1bnRpbWUgZmFpbHVyZXMsIG9yIGJyb2tlbiBVSSBmbG93cyBwcmV2ZW50IG5hdmlnYXRpb24sIGludmVzdGlnYXRlIHRoZSBjYXVzZSBpbiB0aGUgbG9jYWwgY29kZWJhc2UsIG1ha2UgdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBjb2RlIGZpeCwgYW5kIHZlcmlmeSB0aGF0IHRoZSBwYWdlIGNhbiBub3cgYmUgcmVhY2hlZCBiZWZvcmUgY29udGludWluZy5cbiAgIC0gSWYgeW91IGNhbm5vdCBmaXggdGhlIGVycm9ycywgcmVwb3J0IG9uIHRoZSBlcnJvcnMgdGhlbiBzdG9wLlxuMy4gQ2FwdHVyZSBhIHNjcmVlbnNob3QgdGhhdCBmb2N1c2VzIG9uIHRoaXMgdGFyZ2V0OiBcIiR7c2FuaXRpemVkRGVzY3JpcHRpb259XCIuXG40LiBLZWVwIHRoZSBnZW5lcmF0ZWQgaW1hZ2UgYXJ0aWZhY3QgYW5kIHJlcG9ydCB0aGUgc2NyZWVuc2hvdCBmaWxlIHBhdGggcGx1cyBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHdoYXQgd2FzIGNhcHR1cmVkLiBJZiB5b3UgaGFkIHRvIGZpeCBjb2RlIGZpcnN0LCBhbHNvIHN1bW1hcml6ZSB0aGUgZml4LlxuYC50cmltKCk7XG59XG4iLCJpbXBvcnQgeyBjdXJyZW50QmFzZUJyYW5jaCB9IGZyb20gJy4uL3JlcG8vZGVmYXVsdEJyYW5jaC5qcyc7XG5pbXBvcnQgeyBidWlsZE1lcmdlQmFzZUNvbW1hbmQgfSBmcm9tICcuL2Jhc2VCcmFuY2hEaWZmQ29tbWFuZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFNpbXBsaWZ5UHJvbXB0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGJhc2VCcmFuY2ggPSBhd2FpdCBjdXJyZW50QmFzZUJyYW5jaCgpO1xuICBjb25zdCBtZXJnZUJhc2VDb21tYW5kID0gYnVpbGRNZXJnZUJhc2VDb21tYW5kKGJhc2VCcmFuY2gpO1xuICByZXR1cm4gYFxuU2ltcGxpZnkgdGhlIGN1cnJlbnQgYnJhbmNoIGFnYWluc3QgaXRzIGJhc2UgYnJhbmNoIHVzaW5nIFxcYGdpdCBkaWZmIFwiJCgke21lcmdlQmFzZUNvbW1hbmR9KVwiXFxgLlxuRmlyc3QsIGluc3BlY3QgdGhlIGRpZmYgYW5kIHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgZWFjaCBjaGFuZ2VkIGFyZWEuIFRoaXMgaW5jbHVkZXMgbmVhcmJ5IGZ1bmN0aW9ucywgdHlwZXMsIGNhbGwgc2l0ZXMsIHRlc3RzLCBjb25maWd1cmF0aW9ucywgYW5kIGFueSBvdGhlciBmaWxlcyB0aGF0IGhlbHAgZGV0ZXJtaW5lIGlmIHRoZSBjaGFuZ2UgaXMgdHJ1bHkgbmVjZXNzYXJ5LlxuTGV2ZXJhZ2UgdGhpcyBjb250ZXh0IHRvIGlkZW50aWZ5IHJlZHVuZGFuY2llcyB0aGF0IGNhbiBiZSBzYWZlbHkgcmVtb3ZlZCBvciBzaW1wbGlmaWVkLiBMb29rIGZvciBkdXBsaWNhdGUgbG9naWMsIHJlcGVhdGVkIGNvbmRpdGlvbmFscywgdW5uZWNlc3NhcnkgYWJzdHJhY3Rpb25zLCBvdmVybGFwcGluZyBjb2RlIHBhdGhzLCBkZWFkIGNvZGUsIG9yIGVkaXRzIG1hZGUgb2Jzb2xldGUgdXBvbiB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIGNvbnRleHQuXG5cblByaW9yaXRpemUgc2ltcGxpZmljYXRpb25zIHRoYXQgcmVkdWNlIHRoZSByZXZpZXdlcidzIGJ1cmRlbiwgc3VjaCBhczpcbi0gUmVtb3ZpbmcgcmVkdW5kYW50IGVkaXRzIG9yIGRlYWQgY29kZS5cbi0gRWxpbWluYXRpbmcgb3IgbWVyZ2luZyBkdXBsaWNhdGVkIGxvZ2ljIGRpc2NvdmVyZWQgYnkgY29tcGFyaW5nIHRoZSBkaWZmIHdpdGggcmVsYXRlZCBjb2RlLlxuLSBGbGF0dGVuaW5nIHVubmVjZXNzYXJpbHkgY29tcGxleCBsb2dpYyBpbnRyb2R1Y2VkIGluIHRoZSBkaWZmIChlLmcuLCB1c2luZyBlYXJseSByZXR1cm5zIHRvIHJlZHVjZSBuZXN0aW5nLCBzaW1wbGlmeWluZyBib29sZWFuIGV4cHJlc3Npb25zLCBvciByZW1vdmluZyByZWR1bmRhbnQgd3JhcHBlciBmdW5jdGlvbnMpLlxuXG5Db21taXQgYW5kIHB1c2ggeW91ciBjaGFuZ2VzLiBBZnRlcndhcmQsIHN1bW1hcml6ZSB0aGUgcmVkdW5kYW5jaWVzIG9yIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkgeW91IGhhdmUgcmVtb3ZlZC5cbmAudHJpbSgpO1xufVxuIiwiaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbFBhY2tlZFNraWxscygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhcbiAgICBbXG4gICAgICAnYnVueCcsXG4gICAgICAnc2tpbGxzQGxhdGVzdCcsXG4gICAgICAnYWRkJyxcbiAgICAgIGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi4vLi4nLCBpbXBvcnQubWV0YS51cmwpKSxcbiAgICAgICctLWdsb2JhbCcsXG4gICAgICAnLS15ZXMnLFxuICAgICAgJy0tc2tpbGwnLFxuICAgICAgJyonLFxuICAgICAgJy0tYWdlbnQnLFxuICAgICAgJ2NsYXVkZS1jb2RlJyxcbiAgICAgICctLWFnZW50JyxcbiAgICAgICdjb2RleCcsXG4gICAgICAnLS1hZ2VudCcsXG4gICAgICAnZ2VtaW5pLWNsaScsXG4gICAgXSxcbiAgICB7XG4gICAgICB3YWl0TWVzc2FnZTogJ0luc3RhbGxpbmcgcGFja2FnZWQgc2tpbGxzIGdsb2JhbGx5LicsXG4gICAgfVxuICApO1xufVxuIiwiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyBDb21tYW5kLCBPcHRpb24gfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHtcbiAgY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZSxcbiAgZGlzcGxheUFnZW50TmFtZSxcbiAgcnVuQWdlbnRDb21tYW5kLFxuICBydW5BbGxBZ2VudENvbW1hbmRzLFxufSBmcm9tICcuL2FnZW50L2FnZW50Q29tbWFuZHMuanMnO1xuaW1wb3J0IHtcbiAgY2hlY2tQckNpLFxuICBmZXRjaElzc3VlTWVzc2FnZXMsXG4gIGZldGNoUHJNZXNzYWdlcyxcbiAgbGlzdFByUmV2aWV3VGhyZWFkcyxcbiAgbm9ybWFsaXplSXNzdWVOdW1iZXIsXG4gIG9wZW5QcixcbiAgcmVhZFJlcGxpZXNGcm9tU3RkaW4sXG4gIHJlYWRSZXF1aXJlZFN0ZGluVGV4dCxcbiAgcmVhZFN0ZGluVGV4dCxcbiAgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyxcbiAgdXBkYXRlUHIsXG59IGZyb20gJy4vcHIvcHJDb21tYW5kcy5qcyc7XG5pbXBvcnQgeyBidWlsZFBsYW5Qcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvcGxhblByb21wdC5qcyc7XG5pbXBvcnQgeyBidWlsZFJldmlld1Byb21wdCB9IGZyb20gJy4vcHJvbXB0cy9yZXZpZXdQcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRTY3JlZW5zaG90UHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3NjcmVlbnNob3RQcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRTaW1wbGlmeVByb21wdCB9IGZyb20gJy4vcHJvbXB0cy9zaW1wbGlmeVByb21wdC5qcyc7XG5pbXBvcnQgeyBpbnN0YWxsUGFja2VkU2tpbGxzIH0gZnJvbSAnLi9za2lsbHMvaW5zdGFsbFNraWxscy5qcyc7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtLm5hbWUoJ2FnZW50LXNraWxscycpLmRlc2NyaXB0aW9uKCdDTEkgY29tbWFuZHMgZm9yIHRoZSBza2lsbHMgaW4gdGhpcyByZXBvc2l0b3J5Jykuc2hvd0hlbHBBZnRlckVycm9yKCk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2luc3RhbGwtc2tpbGxzJylcbiAgLmRlc2NyaXB0aW9uKCdJbnN0YWxsIGFsbCBwYWNrYWdlZCBza2lsbHMgZ2xvYmFsbHkgZm9yIENsYXVkZSBDb2RlLCBDb2RleCwgYW5kIEdlbWluaSBDTEknKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGluc3RhbGxQYWNrZWRTa2lsbHMoKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnRG9uZVxcbicpO1xuICB9KTtcblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdyZXZpZXcnLFxuICBkZXNjcmlwdGlvbjogJ1J1biByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2ggd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhIHJldmlldyBhZ2VudCcsXG4gIGNob2ljZXM6IFsnYWxsJywgJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgcnVuOiAobW9kZSkgPT5cbiAgICBtb2RlID09PSAnYWxsJ1xuICAgICAgPyBydW5BbGxBZ2VudENvbW1hbmRzKGJ1aWxkUmV2aWV3UHJvbXB0KCksIHtcbiAgICAgICAgICBhbGxBZ2VudHNMYWJlbDogJ3JldmlldyBhZ2VudHMnLFxuICAgICAgICAgIG1hcE91dHB1dDogKGFnZW50LCBvdXRwdXQpID0+IHtcbiAgICAgICAgICAgIGlmIChjb250YWluc05vQ29uY2VyblNlbnRlbmNlKG91dHB1dCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBgIyMgJHtkaXNwbGF5QWdlbnROYW1lKGFnZW50KX1cXG5cXG4ke291dHB1dH1gO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICA6IHJ1bkFnZW50Q29tbWFuZChtb2RlLCBidWlsZFJldmlld1Byb21wdCgpKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1jb2RleCcsICdSdW4gQ29kZXggcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjb2RleCcsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctZ2VtaW5pJywgJ1J1biBHZW1pbmkgQ0xJIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnZ2VtaW5pJywgYnVpbGRSZXZpZXdQcm9tcHQoKSlcbik7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAncGxhbicsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZSB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgcGxhbm5pbmcgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2FsbCcsICdjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChtb2RlLCBpc3N1ZVJlZmVyZW5jZSkgPT5cbiAgICBtb2RlID09PSAnYWxsJ1xuICAgICAgPyBydW5BbGxBZ2VudENvbW1hbmRzKGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpLCB7XG4gICAgICAgICAgYWxsQWdlbnRzTGFiZWw6ICdwbGFubmluZyBhZ2VudHMnLFxuICAgICAgICB9KVxuICAgICAgOiBydW5BZ2VudENvbW1hbmQobW9kZSwgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSkpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgncGxhbi1jb2RleCcsICdSdW4gQ29kZXggcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlJywge1xuICBhcmd1bWVudE5hbWU6ICc8aXNzdWU+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJyxcbiAgcnVuOiAoaXNzdWVSZWZlcmVuY2UpID0+IHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcbmFkZEFnZW50Q29tbWFuZCgncGxhbi1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZScsIHtcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKGlzc3VlUmVmZXJlbmNlKSA9PiBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpKSxcbn0pO1xuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWdlbWluaScsICdSdW4gR2VtaW5pIENMSSBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSkgPT4gcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnc2NyZWVuc2hvdCcpXG4gIC5kZXNjcmlwdGlvbignVGFrZSBhIHNjcmVlbnNob3Qgd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQgdmlhIHBsYXl3cmlnaHQtY2xpJylcbiAgLmFyZ3VtZW50KCc8aW5pdGlhbC11cmw+JywgJ0luaXRpYWwgVVJMIHRvIG9wZW4gYmVmb3JlIG5hdmlnYXRpbmcnKVxuICAuYXJndW1lbnQoJzxwYWdlLW5hbWU+JywgJ1BhZ2UgbmFtZSB0byBuYXZpZ2F0ZSB0byBmcm9tIHRoZSBpbml0aWFsIHBhZ2UnKVxuICAuYXJndW1lbnQoJzxkZXNjcmlwdGlvbj4nLCAnRGVzY3JpcHRpb24gb2YgdGhlIHBhcnQgdG8gY2FwdHVyZSBpbiB0aGUgc2NyZWVuc2hvdCcpXG4gIC5hZGRPcHRpb24oXG4gICAgbmV3IE9wdGlvbignLS1hZ2VudCA8YWdlbnQ+JywgJ1VzZSBhIHNjcmVlbnNob3QgYWdlbnQnKS5jaG9pY2VzKFsnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddKS5tYWtlT3B0aW9uTWFuZGF0b3J5KClcbiAgKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oXG4gICAgYXN5bmMgKFxuICAgICAgaW5pdGlhbFVybDogc3RyaW5nLFxuICAgICAgcGFnZU5hbWU6IHN0cmluZyxcbiAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgICBvcHRpb25zOiB7IGFnZW50OiAnY29kZXgnIHwgJ2NsYXVkZScgfCAnZ2VtaW5pJyB9XG4gICAgKSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShcbiAgICAgICAgYXdhaXQgcnVuQWdlbnRDb21tYW5kKG9wdGlvbnMuYWdlbnQsIGJ1aWxkU2NyZWVuc2hvdFByb21wdChpbml0aWFsVXJsLCBwYWdlTmFtZSwgZGVzY3JpcHRpb24pKVxuICAgICAgKTtcbiAgICB9XG4gICk7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAnc2ltcGxpZnknLFxuICBkZXNjcmlwdGlvbjogJ1J1biBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgc2ltcGxpZnkgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgcnVuOiAoYWdlbnQpID0+IHJ1bkFnZW50Q29tbWFuZChhZ2VudCwgYnVpbGRTaW1wbGlmeVByb21wdCgpKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWNvZGV4JywgJ1J1biBDb2RleCBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjbGF1ZGUnLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ29wZW4tcHInKVxuICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIHB1bGwgcmVxdWVzdCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoJylcbiAgLmFyZ3VtZW50KCc8dGl0bGU+JywgJ1B1bGwgcmVxdWVzdCB0aXRsZScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAodGl0bGU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZWFkU3RkaW5UZXh0KCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgb3BlblByKHsgYm9keTogYm9keSB8fCB1bmRlZmluZWQsIHRpdGxlIH0pO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAke291dHB1dH1cXG5gKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3VwZGF0ZS1wcicpXG4gIC5kZXNjcmlwdGlvbignVXBkYXRlIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCB0aXRsZSBhbmQgYm9keScpXG4gIC5hcmd1bWVudCgnPHRpdGxlPicsICdQdWxsIHJlcXVlc3QgdGl0bGUnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKHRpdGxlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVhZFJlcXVpcmVkU3RkaW5UZXh0KCdFcnJvcjogUFIgYm9keSBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHVwZGF0ZVByKHsgYm9keSwgdGl0bGUgfSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7b3V0cHV0fVxcbmApO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnY2hlY2stcHItY2knKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgdGhlIGxhdGVzdCB0ZXN0LXJlbGF0ZWQgQ0kgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja1ByQ2koKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShyZXN1bHQub3V0cHV0KTtcbiAgICBwcm9jZXNzLmV4aXQocmVzdWx0LmV4aXRDb2RlKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2ZldGNoLWlzc3VlJylcbiAgLmRlc2NyaXB0aW9uKCdGZXRjaCBhbiBpc3N1ZSBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBhcyBZQU1MJylcbiAgLmFyZ3VtZW50KCc8aXNzdWU+JywgJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChpc3N1ZVJlZmVyZW5jZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlUmVmZXJlbmNlKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnZmV0Y2gtcHInKVxuICAuZGVzY3JpcHRpb24oJ0ZldGNoIGEgcHVsbCByZXF1ZXN0IGJvZHkgYW5kIHRpbWVsaW5lIG1lc3NhZ2VzIGFzIFlBTUwsIGV4Y2x1ZGluZyBpbmxpbmUgY29tbWVudHMnKVxuICAuYXJndW1lbnQoJ1twcl0nLCAnR2l0SHViIHB1bGwgcmVxdWVzdCBudW1iZXIgb3IgVVJMOyBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBicmFuY2ggcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChwclJlZmVyZW5jZT86IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZldGNoUHJNZXNzYWdlcyhwclJlZmVyZW5jZSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2xpc3QtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBsaXN0UHJSZXZpZXdUaHJlYWRzKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3Jlc29sdmUtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ1JlcGx5IHRvIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMgYW5kIHJlc29sdmUgdGhlbScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVwbGllcyA9IGF3YWl0IHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxuYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHByb2Nlc3MuYXJndik7XG5cbmZ1bmN0aW9uIGFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQ8VE1vZGUgZXh0ZW5kcyBzdHJpbmc+KGNvbmZpZzoge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIG9wdGlvbkRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNob2ljZXM6IFtUTW9kZSwgLi4uVE1vZGVbXV07XG4gIGFyZ3VtZW50TmFtZT86IHN0cmluZztcbiAgYXJndW1lbnREZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcnVuOiAobW9kZTogVE1vZGUsIGFyZ3VtZW50OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPjtcbn0pOiB2b2lkIHtcbiAgY29uc3QgY29tbWFuZCA9IHByb2dyYW0uY29tbWFuZChjb25maWcubmFtZSkuZGVzY3JpcHRpb24oY29uZmlnLmRlc2NyaXB0aW9uKS5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSk7XG4gIGlmIChjb25maWcuYXJndW1lbnROYW1lKSB7XG4gICAgY29tbWFuZC5hcmd1bWVudChjb25maWcuYXJndW1lbnROYW1lLCBjb25maWcuYXJndW1lbnREZXNjcmlwdGlvbik7XG4gIH1cblxuICBjb21tYW5kXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFnZW50IDxhZ2VudD4nLCBjb25maWcub3B0aW9uRGVzY3JpcHRpb24pLmNob2ljZXMoY29uZmlnLmNob2ljZXMpLm1ha2VPcHRpb25NYW5kYXRvcnkoKSlcbiAgICAuYWN0aW9uKGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgIGNvbnN0IFthcmd1bWVudE9yT3B0aW9ucywgbWF5YmVPcHRpb25zXSA9IGFyZ3MgYXMgW3N0cmluZyB8IHsgYWdlbnQ6IFRNb2RlIH0sIHsgYWdlbnQ6IFRNb2RlIH0gfCB1bmRlZmluZWRdO1xuICAgICAgY29uc3QgYXJndW1lbnQgPSB0eXBlb2YgYXJndW1lbnRPck9wdGlvbnMgPT09ICdzdHJpbmcnID8gYXJndW1lbnRPck9wdGlvbnMgOiAnJztcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSAodHlwZW9mIGFyZ3VtZW50T3JPcHRpb25zID09PSAnc3RyaW5nJyA/IG1heWJlT3B0aW9ucyA6IGFyZ3VtZW50T3JPcHRpb25zKSBhcyB7IGFnZW50OiBUTW9kZSB9O1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnLnJ1bihvcHRpb25zLmFnZW50LCBhcmd1bWVudCkpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRBZ2VudENvbW1hbmQoXG4gIG5hbWU6IHN0cmluZyxcbiAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgY29uZmlnT3JSdW46XG4gICAgfCAoKCkgPT4gUHJvbWlzZTxzdHJpbmc+KVxuICAgIHwge1xuICAgICAgICBhcmd1bWVudE5hbWU6IHN0cmluZztcbiAgICAgICAgYXJndW1lbnREZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAgICAgcnVuOiAoYXJndW1lbnQ6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xuICAgICAgfVxuKTogdm9pZCB7XG4gIGNvbnN0IGNvbW1hbmQgPSBwcm9ncmFtLmNvbW1hbmQobmFtZSkuZGVzY3JpcHRpb24oZGVzY3JpcHRpb24pLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKTtcblxuICBpZiAodHlwZW9mIGNvbmZpZ09yUnVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29tbWFuZC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnT3JSdW4oKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29tbWFuZC5hcmd1bWVudChjb25maWdPclJ1bi5hcmd1bWVudE5hbWUsIGNvbmZpZ09yUnVuLmFyZ3VtZW50RGVzY3JpcHRpb24pLmFjdGlvbihhc3luYyAoYXJndW1lbnQ6IHN0cmluZykgPT4ge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZ09yUnVuLnJ1bihhcmd1bWVudCkpO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJQUk9DRVNTX0NMRUFOVVBfU0lHTkFMUyIsImFjdGl2ZVByb2Nlc3NlcyIsIlNldCIsImNsZWFudXBIYW5kbGVyc0luc3RhbGxlZCIsInJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MiLCJfeCIsIl94MiIsIl9ydW5Db21tYW5kV2l0aFByb2dyZXNzIiwiYXBwbHkiLCJ0aGlzIiwiYXJndW1lbnRzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3IiLCJtIiwiX2NhbGxlZSIsImNvbW1hbmQiLCJvcHRpb25zIiwiX2NvbW1hbmQkIiwicHJvYyIsInByb2Nlc3NUaW1lb3V0Iiwic3RvcFdhaXRQcm9ncmVzcyIsImNvbW1hbmRMb2dnZXIiLCJfeWllbGQkUHJvbWlzZSRhbGwiLCJfeWllbGQkUHJvbWlzZSRhbGwyIiwic3Rkb3V0Iiwic3RkZXJyIiwiZXhpdENvZGUiLCJvdXRwdXQiLCJ3IiwiX2NvbnRleHQiLCJwIiwibiIsInNwYXduIiwic2xpY2UiLCJkZXRhY2hlZCIsInN0ZGlvIiwiY3JlYXRlUHJvY2Vzc1RpbWVvdXQiLCJ0aW1lb3V0TXMiLCJjcmVhdGVXYWl0UHJvZ3Jlc3MiLCJ3YWl0TWVzc2FnZSIsIndhaXRJbnRlcnZhbFNlY29uZHMiLCJjcmVhdGVDb21tYW5kTG9nZ2VyIiwibG9nRmlsZVBhdGgiLCJ2IiwiUHJvbWlzZSIsImFsbCIsInN0cmVhbVRvVGV4dCIsImNodW5rIiwid3JpdGUiLCJyZXNvbHZlIiwicmVqZWN0Iiwib25jZSIsImNvZGUiLCJfc2xpY2VkVG9BcnJheSIsInRpbWVkT3V0IiwiRXJyb3IiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwiY29uY2F0IiwiYSIsImpvaW4iLCJjbG9zZSIsImNsZWFyIiwiZiIsIm1lc3NhZ2UiLCJtaWxsaXNlY29uZHMiLCJmb3JtYXREdXJhdGlvbiIsImxlbmd0aCIsImZvcmNlS2lsbFRpbWVyIiwiYWRkIiwiX3N0ZXAyIiwiX2l0ZXJhdG9yMiIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX2xvb3AiLCJzaWduYWwiLCJ2YWx1ZSIsInByb2Nlc3MiLCJfc3RlcDMiLCJfaXRlcmF0b3IzIiwicyIsImRvbmUiLCJraWxsUHJvY2VzcyIsImVyciIsImUiLCJleGl0Iiwic2lnbmFsTnVtYmVyIiwiaW5zdGFsbENsZWFudXBIYW5kbGVycyIsInRpbWVvdXQiLCJzZXRUaW1lb3V0IiwidW5yZWYiLCJjbGVhclRpbWVvdXQiLCJwaWQiLCJraWxsIiwiX3VudXNlZCIsIl94MyIsIl94NCIsIl9zdHJlYW1Ub1RleHQiLCJfY2FsbGVlMiIsInN0cmVhbSIsIm9uQ2h1bmsiLCJjaHVua3MiLCJkZWNvZGVyIiwiX2l0ZXJhdG9yQWJydXB0Q29tcGxldGlvbiIsIl9kaWRJdGVyYXRvckVycm9yIiwiX2l0ZXJhdG9yRXJyb3IiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImNodW5rVGV4dCIsImZpbmFsQ2h1bmsiLCJfdCIsIl9jb250ZXh0MiIsIlRleHREZWNvZGVyIiwiX2FzeW5jSXRlcmF0b3IiLCJuZXh0IiwiZGVjb2RlIiwiVWludDhBcnJheSIsInB1c2giLCJ3cml0ZVByb2dyZXNzIiwiZG90Q291bnQiLCJ0aW1lciIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsIl94NSIsIl9jcmVhdGVDb21tYW5kTG9nZ2VyIiwiX2NhbGxlZTYiLCJ3YXJuIiwiX3QyIiwiX2NvbnRleHQ2IiwiX2Nsb3NlIiwiX2NhbGxlZTMiLCJfY29udGV4dDMiLCJlcnJvciIsIlN0cmluZyIsIm1rZGlyIiwiZGlybmFtZSIsInJlY3Vyc2l2ZSIsImNyZWF0ZVdyaXRlU3RyZWFtIiwiZmxhZ3MiLCJvbiIsIndyaXRhYmxlIiwiX2Nsb3NlMiIsIl9jYWxsZWU0IiwiX2NvbnRleHQ0IiwiZW5kIiwiX2Nsb3NlMyIsIl9jYWxsZWU1IiwiX2NvbnRleHQ1IiwiTk9fQ09OQ0VSTl9NRVNTQUdFIiwiQUdFTlRfTkFNRVMiLCJDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYIiwiUmVnRXhwIiwicnVuQWxsQWdlbnRDb21tYW5kcyIsIl9ydW5BbGxBZ2VudENvbW1hbmRzIiwicHJvbXB0IiwicmVzb2x2ZWRQcm9tcHQiLCJvdXRwdXRzIiwiYWxsQWdlbnRzTGFiZWwiLCJ3YWl0TWVzc2FnZUZvciIsIm1hcCIsImFnZW50IiwiX29wdGlvbnMkbWFwT3V0cHV0IiwiX29wdGlvbnMkbWFwT3V0cHV0MiIsIl9vcHRpb25zIiwicnVuQWdlbnRDb21tYW5kIiwidHJpbSIsIm1hcE91dHB1dCIsImNhbGwiLCJkaXNwbGF5QWdlbnROYW1lIiwiZmlsdGVyIiwidW5kZWZpbmVkIiwiX3J1bkFnZW50Q29tbWFuZCIsIl90MyIsImNyZWF0ZUFnZW50Q29tbWFuZCIsImFnZW50TG9nRmlsZVBhdGgiLCJ0YXJnZXQiLCJub3ciLCJEYXRlIiwiX21hcDIiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwidHdvRGlnaXRzIiwibW9udGgiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwidG9TdHJpbmciLCJwYWRTdGFydCIsInlhbWxTdHJpbmdpZnlPcHRpb25zIiwiYmxvY2tRdW90ZSIsImxpbmVXaWR0aCIsInByb2dyZXNzIiwicHJvY2Vzc1N0ZGVyciIsImV4aXRXaXRoRXJyb3IiLCJyZWFkU3RkaW5UZXh0IiwiX3JlYWRTdGRpblRleHQiLCJwcm9jZXNzU3RkaW4iLCJpc1RUWSIsInJlYWRSZXF1aXJlZFN0ZGluVGV4dCIsIl9yZWFkUmVxdWlyZWRTdGRpblRleHQiLCJlcnJvck1lc3NhZ2UiLCJpbnB1dCIsInJ1bkNvbW1hbmQiLCJfcnVuQ29tbWFuZCIsIl9vcHRpb25zJGFsbG93ZWRFeGl0QyIsImFsbG93ZWRFeGl0Q29kZXMiLCJfcmV0IiwiYXR0ZW1wdCIsIl9jb21tYW5kJDIiLCJmYWlsdXJlTWVzc2FnZSIsInJldHJ5Iiwic3RkaW5EYXRhIiwic3RkaW4iLCJpbmNsdWRlcyIsImlzVHJhbnNpZW50R2hGYWlsdXJlIiwiR0hfUkVUUllfTUFYX0FUVEVNUFRTIiwic2xlZXAiLCJkIiwiX3JlZ2VuZXJhdG9yVmFsdWVzIiwiZ2giLCJfZ2giLCJhcmdzIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZ2hBbGxvd0V4aXRDb2RlcyIsIl94NiIsIl94NyIsIl94OCIsIl9naEFsbG93RXhpdENvZGVzIiwiY3VycmVudFJlcG9QYXJ0cyIsIl9jdXJyZW50UmVwb1BhcnRzIiwibmFtZVdpdGhPd25lciIsIl9uYW1lV2l0aE93bmVyJHNwbGl0IiwiX25hbWVXaXRoT3duZXIkc3BsaXQyIiwib3duZXIiLCJuYW1lIiwiX2NvbnRleHQ3Iiwic3BsaXQiLCJjdXJyZW50UHJOdW1iZXIiLCJfY3VycmVudFByTnVtYmVyIiwiX2NhbGxlZTciLCJfY29udGV4dDgiLCJncmFwaHFsIiwiX3g5IiwiX3gwIiwiX2dyYXBocWwiLCJfY2FsbGVlOCIsInF1ZXJ5IiwidmFycyIsIl9pIiwiX09iamVjdCRlbnRyaWVzIiwiX09iamVjdCRlbnRyaWVzJF9pIiwia2V5IiwicmVzcG9uc2UiLCJlcnJvck1lc3NhZ2VzIiwiX2NvbnRleHQ5IiwiT2JqZWN0IiwiZW50cmllcyIsIkpTT04iLCJwYXJzZSIsIkFycmF5IiwiaXNBcnJheSIsImVycm9ycyIsIl9lcnJvciRtZXNzYWdlIiwieWFtbER1bXAiLCJkYXRhIiwic3RyaW5naWZ5WWFtbCIsImRlZXBDb3B5Iiwic3RyaW5naWZ5Iiwic3Bhd25TeW5jU2FmZSIsIl9yZXN1bHQkc3RhdHVzIiwiX3Jlc3VsdCRzdGRvdXQiLCJfcmVzdWx0JHN0ZGVyciIsInJlc3VsdCIsInNwYXduU3luYyIsImVuY29kaW5nIiwic3RhdHVzIiwidGVzdCIsIlRFU1RfUkVMQVRFRF9QQVRURVJOIiwiV09SS0ZMT1dfUlVOX0pTT05fRklFTERTIiwiRkFJTEVEX0xPR19MSU5FX1BSRUZJWF9QQVRURVJOIiwicnRrQXZhaWxhYmxlIiwibGF0ZXN0UHJDaVJlc3VsdHMiLCJfbGF0ZXN0UHJDaVJlc3VsdHMiLCJwck51bWJlciIsIl9zdW1tYXJ5JHBhc3MiLCJfc3VtbWFyeSRmYWlsIiwiX3N1bW1hcnkkcGVuZGluZyIsIl9zdW1tYXJ5JHNraXBwaW5nIiwiX3N1bW1hcnkkY2FuY2VsIiwiY2hlY2tzIiwicmF3Iiwic3VtbWFyeSIsIlN5bnRheEVycm9yIiwicmVkdWNlIiwiY291bnRzIiwiY2hlY2siLCJfY2hlY2skYnVja2V0MiIsIl9jb3VudHMkYnVja2V0IiwiYnVja2V0IiwidG90YWwiLCJwYXNzIiwiZmFpbCIsInBlbmRpbmciLCJza2lwcGluZyIsImNhbmNlbCIsIndhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MiLCJfd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyIsInNsZWVwRm4iLCJsYXRlc3RDaVJlc3VsdHNGbiIsIndyaXRlUHJvZ3Jlc3NGbiIsImF0dGVtcHRzIiwiY2lSZXN1bHRzIiwiY2xhc3NpZmllZFJlc3VsdHMiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QyIiwiZmFpbGVkUmVzdWx0cyIsInJ1bm5pbmdSZXN1bHRzIiwic2xlZXBTZWNvbmRzIiwiY2xhc3NpZmllZExhdGVzdFJlc3VsdHMiLCJmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQiLCJrZXlzIiwibGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3ciLCJncm91cGVkUmVzdWx0cyIsIndvcmtmbG93S2V5Iiwid29ya2Zsb3ciLCJmcm9tRW50cmllcyIsIl9yZWYiLCJfbGF0ZXN0QXR0ZW1wdENoZWNrcyQiLCJfcmVmMiIsImxhdGVzdEF0dGVtcHRDaGVja3MiLCJncm91cHMiLCJncm91cGVkQ2hlY2tzIiwicnVuSWQiLCJ3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayIsIndvcmtmbG93QXR0ZW1wdEtleSIsImdyb3VwIiwiZ2V0Iiwic2V0IiwiTWFwIiwiZnJvbSIsInZhbHVlcyIsImxhdGVzdEdyb3VwIiwiY3VycmVudEdyb3VwIiwibGF0ZXN0R3JvdXBUaW1lc3RhbXAiLCJsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyIsImZpcnN0Q2hlY2siLCJsYXRlc3RDaGVjayIsImN1cnJlbnRMYXRlc3QiLCJsYXRlc3RDaGVja1RpbWVzdGFtcCIsImNsYXNzaWZpY2F0aW9uIiwid29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbiIsInNvbWUiLCJ0ZXN0UmVsYXRlZENoZWNrIiwiX2xpbmskbWF0Y2giLCJsaW5rIiwibWF0Y2giLCJ3b3JrZmxvd1J1biIsIl93b3JrZmxvd1J1biIsInJ1bkpzb24iLCJidWNrZXRzIiwiX2NoZWNrJGJ1Y2tldCIsIl9jaGVjayRzdGFydGVkQXQiLCJ0aW1lc3RhbXAiLCJjb21wbGV0ZWRBdCIsInN0YXJ0ZWRBdCIsIl9zbGVlcFNlY29uZHMiLCJzZWNvbmRzIiwiY2hlY2tQckNpIiwiX2NoZWNrUHJDaSIsIl95aWVsZCR3YWl0Rm9yUnVubmluZyIsIl95aWVsZCR3YWl0Rm9yUnVubmluZzIiLCJ3YWl0QXR0ZW1wdHMiLCJ3YWl0VGltZWRPdXQiLCJjbGFzc2lmaWVkTGF0ZXN0IiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0MyIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDQiLCJwYXlsb2FkIiwid2FpdGVkX2Zvcl90ZXN0X3JlbGF0ZWRfY2hlY2tzIiwidGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfYXR0ZW1wdHMiLCJ0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF90aW1lZF9vdXQiLCJfcmVmNCIsIl9yZWY2IiwiY29tcGFjdFdvcmtmbG93IiwiX3Q0IiwiX3Q1IiwiY29tcGFjdFdvcmtmbG93UmVzdWx0IiwiX29iamVjdFNwcmVhZCIsImJ1aWxkRmFpbGVkV29ya2Zsb3dEZXRhaWxzIiwiZmFpbGVkV29ya2Zsb3dMb2ciLCJmYWlsZWRfd29ya2Zsb3dzIiwidGVzdF93b3JrZmxvd19vdXRwdXQiLCJfcmVmNyIsIl9yZWY4IiwicnVubmluZ190ZXN0X3JlbGF0ZWRfd29ya2Zsb3dzIiwibGF0ZXN0IiwiX2NvbXBhY3RXb3JrZmxvd1Jlc3VsdCIsIl9zdHJpbmdPclVuZGVmaW5lZCIsInJ1biIsImZhaWxlZEpvYiIsImZhaWxlZFdvcmtmbG93UnVuSm9iIiwic3RyaW5nT3JVbmRlZmluZWQiLCJqb2IiLCJqb2JfdXJsIiwidXJsIiwiZmFpbGVkX3N0ZXAiLCJmYWlsZWRXb3JrZmxvd1J1blN0ZXBOYW1lIiwicnVuX2lkIiwicnVuX3VybCIsImJyYW5jaCIsImhlYWRCcmFuY2giLCJzaGEiLCJoZWFkU2hhIiwiY29uY2x1c2lvbiIsIl9mYWlsZWRXb3JrZmxvd0xvZyIsImxvZyIsImZhaWxlZF9sb2ciLCJyZWZpbmVGYWlsZWRXb3JrZmxvd0xvZyIsInNhbml0aXplZElucHV0Iiwic2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyIsInN0cmlwVlRDb250cm9sQ2hhcmFjdGVycyIsImxpbmUiLCJyZXBsYWNlIiwiam9iTmFtZSIsIl9yZWYzIiwiX3J1biRqb2JzJGZpbmQiLCJqb2JzIiwiZmluZCIsIl9qb2Ikc3RlcHMkZmluZCRuYW1lIiwiX2pvYiRzdGVwcyRmaW5kIiwiX2pvYiRzdGVwcyRmaW5kMiIsInN0ZXBzIiwic3RlcCIsImN1cnJlbnRCYXNlQnJhbmNoIiwiX2N1cnJlbnRCYXNlQnJhbmNoIiwiX3lpZWxkJGN1cnJlbnRQdWxsUmVxIiwiY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCIsImN1cnJlbnREZWZhdWx0QnJhbmNoIiwiX2N1cnJlbnREZWZhdWx0QnJhbmNoIiwicmVxdWlyZU5vbkVtcHR5IiwiX2N1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2giLCJiYXNlQnJhbmNoIiwiaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nIiwibm9ybWFsaXplSXNzdWVOdW1iZXIiLCJyZWZlcmVuY2UiLCJleHRyYWN0R2l0SHViUmVmZXJlbmNlTnVtYmVyIiwibm9ybWFsaXplUHJOdW1iZXIiLCJmZXRjaElzc3VlTWVzc2FnZXMiLCJfZmV0Y2hJc3N1ZU1lc3NhZ2VzIiwiaXNzdWVOdW1iZXIiLCJfeWllbGQkY3VycmVudFJlcG9QYXIiLCJfeWllbGQkY3VycmVudFJlcG9QYXIyIiwiaXNzdWUiLCJpc3N1ZU1lc3NhZ2VzIiwibnVtYmVyIiwiZmV0Y2hQck1lc3NhZ2VzIiwiX2ZldGNoUHJNZXNzYWdlcyIsInJlc29sdmVkUHJOdW1iZXIiLCJwdWxsUmVxdWVzdCIsImN1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyIsInB1bGxfcmVxdWVzdCIsImZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSIsIl9mZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUiLCJwck51bWJlck91dHB1dCIsIl9jdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMiLCJfeWllbGQkY3VycmVudFJlcG9QYXIzIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyNCIsInByTWVzc2FnZXMiLCJsYWJlbCIsInJlZmVyZW5jZVRleHQiLCJraW5kU2VnbWVudCIsIl9pc3N1ZU1lc3NhZ2VzIiwibWVzc2FnZXMiLCJmZXRjaE1ldGFkYXRhIiwibm91biIsInNlbGVjdE1ldGFkYXRhIiwiX3Jlc3BvbnNlJGRhdGEiLCJyZXBvc2l0b3J5IiwicGFnaW5hdGVNZXNzYWdlcyIsInNlbGVjdENvbm5lY3Rpb24iLCJfcmVzcG9uc2UkZGF0YTIiLCJjb21tZW50cyIsIm1hcE5vZGUiLCJjb21tZW50TWVzc2FnZSIsIl9wck1lc3NhZ2VzIiwiaXNzdWVDb21tZW50cyIsInJldmlld3MiLCJfcmVzcG9uc2UkZGF0YTMiLCJwcklzc3VlQ29tbWVudHMiLCJwclJldmlld3MiLCJzb3J0IiwiY29tcGFyZU1lc3NhZ2VzQnlDcmVhdGVkQXQiLCJsZWZ0IiwicmlnaHQiLCJsZWZ0Q3JlYXRlZEF0IiwiY3JlYXRlZEF0IiwicmlnaHRDcmVhdGVkQXQiLCJsb2NhbGVDb21wYXJlIiwiX3gxIiwiX3gxMCIsIl9wcklzc3VlQ29tbWVudHMiLCJfcmVzcG9uc2UkZGF0YTQiLCJfeDExIiwiX3gxMiIsIl94MTMiLCJfcHJSZXZpZXdzIiwiX3Jlc3BvbnNlJGRhdGE1IiwicmV2aWV3TWVzc2FnZSIsIl94MTQiLCJfcGFnaW5hdGVNZXNzYWdlcyIsIl9jYWxsZWU5IiwiY29uZmlnIiwiY3Vyc29yIiwiX2Nvbm5lY3Rpb24kcGFnZUluZm8kIiwiY29ubmVjdGlvbiIsIk51bWJlciIsIm5vZGVzIiwiaGFzTWVzc2FnZUJvZHkiLCJwYWdlSW5mbyIsImhhc05leHRQYWdlIiwiZW5kQ3Vyc29yIiwiX3gxNSIsIl9mZXRjaE1ldGFkYXRhIiwiX2NhbGxlZTAiLCJfbWV0YWRhdGEkYXV0aG9yJGxvZ2kiLCJfbWV0YWRhdGEkYXV0aG9yIiwiX21ldGFkYXRhJGJvZHkiLCJtZXRhZGF0YSIsIl9jb250ZXh0MCIsInRpdGxlIiwiYXV0aG9yIiwibG9naW4iLCJib2R5IiwiY29tbWVudCIsIl9jb21tZW50JGF1dGhvciRsb2dpbiIsIl9jb21tZW50JGF1dGhvciIsInR5cGUiLCJyZXZpZXciLCJfcmV2aWV3JGF1dGhvciRsb2dpbiIsIl9yZXZpZXckYXV0aG9yIiwiX3JldmlldyRzdGF0ZSIsIl9yZXZpZXckc3VibWl0dGVkQXQiLCJfcmV2aWV3JGJvZHkiLCJzdGF0ZSIsInN1Ym1pdHRlZEF0Iiwib3BlblByIiwiX29wZW5QciIsIl90ZW1wIiwiaGVhZCIsImJhc2UiLCJjcmVhdGVBcmdzIiwidXBkYXRlUHIiLCJfdXBkYXRlUHIiLCJlZGl0UHIiLCJfZWRpdFByIiwiZWRpdEFyZ3MiLCJyZWFkUmVwbGllc0Zyb21TdGRpbiIsIl9yZWFkUmVwbGllc0Zyb21TdGRpbiIsIm5vcm1hbGl6ZWRSZXBsaWVzIiwidGhyZWFkSWQiLCJwYXJzZVJlcGx5SW5wdXQiLCJyZXBsaWVzIiwicGFnaW5hdGVSZXZpZXdUaHJlYWRzIiwiX3BhZ2luYXRlUmV2aWV3VGhyZWFkcyIsIm9uVGhyZWFkIiwiX3lpZWxkJGdyYXBocWwkZGF0YSIsIl9yZXZpZXdUaHJlYWRzJHBhZ2VJbiIsInJldmlld1RocmVhZHMiLCJ0aHJlYWQiLCJ1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzIiwiX3VucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMiLCJpZHMiLCJpc1Jlc29sdmVkIiwiaWQiLCJ1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyIsIl91bnJlc29sdmVkUmV2aWV3VGhyZWFkcyIsInRocmVhZHMiLCJfcGFnZUluZm8kZW5kQ3Vyc29yIiwiX3lpZWxkJGdyYXBocWwkZGF0YTIiLCJfcGFnZUluZm8kZW5kQ3Vyc29yMiIsImNvbW1lbnRDb25uZWN0aW9uIiwiX3Q2IiwiX3Q3IiwiX3Q4Iiwibm9ybWFsaXplQ29tbWVudEF1dGhvciIsIm5vZGUiLCJpc091dGRhdGVkIiwicGF0aCIsIm9yaWdpbmFsTGluZSIsInN0YXJ0TGluZSIsIm9yaWdpbmFsU3RhcnRMaW5lIiwibGlzdFByUmV2aWV3VGhyZWFkcyIsIl9saXN0UHJSZXZpZXdUaHJlYWRzIiwiX3Q5IiwiX3QwIiwidW5yZXNvbHZlZF90aHJlYWRzIiwicmVzb2x2ZVByUmV2aWV3VGhyZWFkcyIsIl9yZXNvbHZlUHJSZXZpZXdUaHJlYWRzIiwidW5yZXNvbHZlZElkcyIsInJlc29sdmVkVGhyZWFkSWRzIiwiX3N0ZXAyJHZhbHVlIiwiaW5kZXgiLCJfc3RlcDIkdmFsdWUkIiwiX3QxIiwiX3QxMCIsIl90MTEiLCJoYXMiLCJyZXNvbHZlUmV2aWV3VGhyZWFkIiwicmVzb2x2ZWRfdGhyZWFkX2lkcyIsInBhcnNlZCIsIl90eXBlb2YiLCJldmVyeSIsInJlcGx5IiwiaXNSZXBseUlucHV0IiwiYnVpbGRQbGFuUHJvbXB0IiwiX2J1aWxkUGxhblByb21wdCIsImlzc3VlWWFtbCIsImJ1aWxkTWVyZ2VCYXNlQ29tbWFuZCIsInNoZWxsUXVvdGUiLCJyZXBsYWNlQWxsIiwiYnVpbGRSZXZpZXdQcm9tcHQiLCJfYnVpbGRSZXZpZXdQcm9tcHQiLCJtZXJnZUJhc2VDb21tYW5kIiwicHJDb250ZXh0IiwiYnVpbGRQckNvbnRleHRJbnN0cnVjdGlvbnMiLCJidWlsZFNjcmVlbnNob3RQcm9tcHQiLCJpbml0aWFsVXJsIiwicGFnZU5hbWUiLCJzY3JlZW5zaG90RGVzY3JpcHRpb24iLCJzYW5pdGl6ZWREZXNjcmlwdGlvbiIsImJ1aWxkU2ltcGxpZnlQcm9tcHQiLCJfYnVpbGRTaW1wbGlmeVByb21wdCIsImluc3RhbGxQYWNrZWRTa2lsbHMiLCJfaW5zdGFsbFBhY2tlZFNraWxscyIsImZpbGVVUkxUb1BhdGgiLCJVUkwiLCJwcm9ncmFtIiwiQ29tbWFuZCIsImFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQiLCJkZXNjcmlwdGlvbiIsImFsbG93RXhjZXNzQXJndW1lbnRzIiwiYXJndW1lbnROYW1lIiwiYXJndW1lbnQiLCJhcmd1bWVudERlc2NyaXB0aW9uIiwiYWRkT3B0aW9uIiwiT3B0aW9uIiwib3B0aW9uRGVzY3JpcHRpb24iLCJjaG9pY2VzIiwibWFrZU9wdGlvbk1hbmRhdG9yeSIsImFjdGlvbiIsIl9sZW4iLCJfa2V5IiwiX3JlZjEwIiwiYXJndW1lbnRPck9wdGlvbnMiLCJtYXliZU9wdGlvbnMiLCJfYXJnczAiLCJhZGRBZ2VudENvbW1hbmQiLCJjb25maWdPclJ1biIsIl9jYWxsZWUxMCIsIl9jb250ZXh0MTAiLCJfY2FsbGVlMSIsIl9jb250ZXh0MSIsInNob3dIZWxwQWZ0ZXJFcnJvciIsIm1vZGUiLCJjb250YWluc05vQ29uY2VyblNlbnRlbmNlIiwiaXNzdWVSZWZlcmVuY2UiLCJwclJlZmVyZW5jZSIsInBhcnNlQXN5bmMiLCJhcmd2Il0sIm1hcHBpbmdzIjoiOzs7bXpIQWdCTyxJQUtEQSxFQUEwQixDQUFDLFNBQVUsVUFBVyxVQUNoREMsRUFBa0IsSUFBSUMsSUFDeEJDLEdBQTJCLEVBSS9CLFNBQXNCQyxFQUFzQkMsRUFBQUMsR0FBQSxPQUFBQyxFQUFBQyxNQUFBQyxLQUFBQyxVQUFBLENBa0MzQyxTQUFBSCxJQUFBLE9BQUFBLEVBQUFJLEVBQUFDLElBQUFDLEVBbENNLFNBQUFDLEVBQXNDQyxFQUFtQkMsR0FBMEIsSUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQSxPQUFBZixJQUFBZ0IsRUFBQSxTQUFBQyxHQUFBLGNBQUFBLEVBQUFDLEVBQUFELEVBQUFFLEdBQUEsS0FBQSxFQU1LLFlBTkwsSUFBMUJmLElBQUFBLEVBQTZCLENBQUEsR0FDckZFLEVBQU9jLEVBQWdCLE9BQVhmLEVBQUNGLEVBQVEsSUFBRUUsRUFBSSxHQUFJRixFQUFRa0IsTUFBTSxHQUFJLENBQ3JEQyxVQUFVLEVBQ1ZDLE1BQU8sQ0FBQyxTQUFVLE9BQVEsVUFFdEJoQixFQUFpQmlCLEVBQXFCbEIsRUFBTUYsRUFBUXFCLFdBQ3BEakIsRUFBbUJrQixFQUFtQnRCLEVBQVF1QixZQUFhdkIsRUFBUXdCLHFCQUFvQlgsRUFBQUUsRUFBQSxFQUNqRVUsRUFBb0J6QixFQUFRMEIsYUFBWSxLQUFBLEVBQWpELE9BQWJyQixFQUFhUSxFQUFBYyxFQUFBZCxFQUFBQyxFQUFBLEVBQUFELEVBQUFFLEVBQUEsRUFHd0JhLFFBQVFDLElBQUksQ0FDbkRDLEVBQWE1QixFQUFLTSxPQUFRLFNBQUN1QixHQUFLLE9BQUsxQixFQUFjMkIsTUFBTUQsRUFBTSxHQUMvREQsRUFBYTVCLEVBQUtPLE9BQVEsU0FBQ3NCLEdBQUssT0FBSzFCLEVBQWMyQixNQUFNRCxFQUFNLEdBQy9ELElBQUlILFFBQWdCLFNBQUNLLEVBQVNDLEdBQzVCaEMsRUFBS2lDLEtBQUssUUFBU0QsR0FDbkJoQyxFQUFLaUMsS0FBSyxRQUFTLFNBQUNDLEdBQUksT0FBS0gsUUFBUUcsRUFBQUEsRUFBUSxFQUFFLEVBQ2pELEtBQ0EsS0FBQSxFQVA2QixHQU83QjlCLEVBQUFPLEVBQUFjLEVBQUFwQixFQUFBOEIsRUFBQS9CLEVBQUEsR0FQS0UsRUFBTUQsRUFBQSxHQUFFRSxFQUFNRixFQUFBLEdBQUVHLEVBQVFILEVBQUEsSUFTM0JKLEVBQWVtQyxXQUFVLENBQUF6QixFQUFBRSxFQUFBLEVBQUEsS0FBQSxDQUFBLE1BQ3JCLElBQUl3QixNQUFNQyxFQUFtQixHQUFBQyxPQUFJakMsR0FBTWlDLE9BQUdoQyxHQUFVTixFQUFla0IsVUFBV3RCLElBQVMsS0FBQSxFQUFBLEdBRzlFLElBQWJXLEVBQWMsQ0FBQUcsRUFBQUUsRUFBQSxFQUFBLEtBQUEsQ0FBQSxPQUFBRixFQUFBNkIsRUFBQSxFQUNUbEMsR0FBTSxLQUFBLEVBR2tCLE1BQTNCRyxLQUFNOEIsT0FBTWpDLEdBQU1pQyxPQUFHaEMsR0FDckIsSUFBSThCLE1BQU01QixzQkFBTThCLE9BQXVCMUMsRUFBUTRDLEtBQUssT0FBTyxLQUFBLEVBQUEsT0FBQTlCLEVBQUFDLEVBQUEsRUFBQUQsRUFBQUUsRUFBQSxFQUUzRFYsRUFBY3VDLFFBQU8sS0FBQSxFQUVSLE9BRG5CekMsRUFBZTBDLFFBQ2Z6QyxJQUFtQlMsRUFBQWlDLEVBQUEsR0FBQSxLQUFBLEVBQUEsT0FBQWpDLEVBQUE2QixFQUFBLEdBQUEsRUFBQTVDLEVBQUEsS0FBQSxDQUFBLENBQUEsR0FBQSxFQUFBLElBQUEsSUFFdEJQLEVBQUFDLE1BQUFDLEtBQUFDLFVBQUEsQ0FFTSxTQUFTOEMsRUFBb0I3QixFQUFnQlUsRUFBbUJ0QixHQUNyRSxJQUFNZ0QsRUFBTywyQkFBQU4sT0FJUixTQUF3Qk8sR0FDN0IsR0FBSUEsRUFBWSxNQUF3QixFQUN0QyxNQUFBLEdBQUFQLE9BQVVPLEVBQVksS0FBbUIsS0FFM0MsR0FBSUEsRUFBWSxLQUFtQixFQUNqQyxNQUFBLEdBQUFQLE9BQVVPLEVBQVksSUFBYyxLQUV0QyxHQUFJQSxFQUFlLEtBQVMsRUFDMUIsTUFBQSxHQUFBUCxPQUFVTyxFQUFlLElBQUksS0FFL0IsTUFBQSxHQUFBUCxPQUFVTyxFQUFZLEtBQ3hCLENBZjZDQyxDQUFlNUIsR0FBVSxNQUFBb0IsT0FBSzFDLEVBQVE0QyxLQUFLLE1BQ3RGLE9BQU9oQyxFQUFPdUMsT0FBUyxFQUFDLEdBQUFULE9BQU05QixFQUFNLE1BQUE4QixPQUFLTSxHQUFZQSxDQUN2RCxDQWVPLFNBQVMzQixFQUNkbEIsRUFDQW1CLFFBQVMsSUFBVEEsSUFBQUEsRUFsRXdDLE1Bb0V4QyxJQUNJOEIsRUFEQWIsR0FBVyxFQUVmckQsRUFBZ0JtRSxJQUFJbEQsR0F1QnRCLFdBQ0UsR0FBSWYsRUFDRixPQUVGQSxHQUEyQixFQUFLLElBRVlrRSxFQUZaQyxFQUFBQyxFQUVYdkUsR0FBdUIsSUFBQSxJQUFBd0UsRUFBQSxXQUFFLElBQW5DQyxFQUFNSixFQUFBSyxNQUNmQyxRQUFReEIsS0FBS3NCLEVBQVEsV0FBTSxJQUNTRyxFQURUQyxFQUFBTixFQUNOdEUsR0FBZSxJQUFsQyxJQUFBNEUsRUFBQUMsTUFBQUYsRUFBQUMsRUFBQTlDLEtBQUFnRCxNQUFvQyxDQUNsQ0MsRUFEYUosRUFBQUYsTUFDS0QsRUFDcEIsQ0FBQyxDQUFBLE1BQUFRLEdBQUFKLEVBQUFLLEVBQUFELEVBQUEsQ0FBQSxRQUFBSixFQUFBZixHQUFBLENBQ0RhLFFBQVFRLEtBQUssSUFLbkIsU0FBc0JWLEdBQ3BCLE9BQVFBLEdBQ04sSUFBSyxTQUNILE9BQU8sRUFDVCxJQUFLLFVBQ0gsT0FBTyxHQUNULElBQUssU0FDSCxPQUFPLEVBRWIsQ0FkeUJXLENBQWFYLEdBQ2xDLEVBQ0YsRUFQQSxJQUFBSCxFQUFBUSxNQUFBVCxFQUFBQyxFQUFBdkMsS0FBQWdELE1BQUFQLEdBT0MsQ0FBQSxNQUFBUyxHQUFBWCxFQUFBWSxFQUFBRCxFQUFBLENBQUEsUUFBQVgsRUFBQVIsR0FBQSxDQUNILENBcENFdUIsR0FDQSxJQUFNQyxFQUFVQyxXQUFXLFdBQ3pCakMsR0FBVyxFQUNYMEIsRUFBWTlELEVBQU0sWUFDbEJpRCxFQUFpQm9CLFdBQVcsV0FBQSxPQUFNUCxFQUFZOUQsRUFBTSxVQUFVLEVBekVwQyxNQTBFWHNFLE9BQ2pCLEVBQUduRCxHQUdILE9BRkFpRCxFQUFRRSxRQUVELENBQ0wzQixNQUFPLFdBQ0w0QixhQUFhSCxHQUNUbkIsR0FDRnNCLGFBQWF0QixHQUVmbEUsRUFBZSxPQUFRaUIsRUFDekIsRUFDQW9DLFNBQVUsV0FBRixPQUFRQSxDQUFRLEVBQ3hCakIsVUFBQUEsRUFFSixDQTZCQSxTQUFTMkMsRUFBWTlELEVBQXVCdUQsR0FDMUMsR0FBSXZELEVBQUt3RSxLQUFPeEUsRUFBS3dFLElBQU0sRUFDekIsSUFFRSxZQURBZixRQUFRZ0IsTUFBTXpFLEVBQUt3RSxJQUFLakIsRUFFMUIsQ0FBRSxNQUFBbUIsR0FDQSxDQUdKMUUsRUFBS3lFLEtBQUtsQixFQUNaLENBRUEsU0FBc0IzQixFQUFZK0MsRUFBQUMsR0FBQSxPQUFBQyxFQUFBdkYsTUFBQUMsS0FBQUMsVUFBQSxDQXFCakMsU0FBQXFGLElBQUEsT0FBQUEsRUFBQXBGLEVBQUFDLElBQUFDLEVBckJNLFNBQUFtRixFQUNMQyxFQUNBQyxHQUFpQyxJQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBMUQsRUFBQTJELEVBQUFDLEVBQUFDLEVBQUEsT0FBQWhHLElBQUFnQixFQUFBLFNBQUFpRixHQUFBLGNBQUFBLEVBQUEvRSxFQUFBK0UsRUFBQTlFLEdBQUEsS0FBQSxFQUFBLEdBRTVCa0UsRUFBTSxDQUFBWSxFQUFBOUUsRUFBQSxFQUFBLEtBQUEsQ0FBQSxPQUFBOEUsRUFBQW5ELEVBQUEsRUFDRixJQUFFLEtBQUEsRUFHTHlDLEVBQW1CLEdBQ25CQyxFQUFVLElBQUlVLFlBQWFULEdBQUEsRUFBQUMsR0FBQSxFQUFBTyxFQUFBL0UsRUFBQSxFQUFBMEUsRUFBQU8sRUFDUGQsR0FBTSxLQUFBLEVBQUEsT0FBQVksRUFBQTlFLEVBQUEsRUFBQXlFLEVBQUFRLE9BQUEsS0FBQSxFQUFBLEtBQUFYLElBQUFJLEVBQUFJLEVBQUFsRSxHQUFBb0MsTUFBQSxDQUFBOEIsRUFBQTlFLEVBQUEsRUFBQSxLQUFBLENBQWZnQixFQUFLMEQsRUFBQS9CLE1BQ2RnQyxFQUE2QixpQkFBVjNELEVBQXFCQSxFQUFRcUQsRUFBUWEsT0FBTyxJQUFJQyxXQUFXbkUsR0FBUSxDQUFFa0QsUUFBUSxJQUN0R0UsRUFBT2dCLEtBQUtULEdBQ0wsTUFBUFIsR0FBQUEsRUFBVVEsR0FBVyxLQUFBLEVBQUFMLEdBQUEsRUFBQVEsRUFBQTlFLEVBQUEsRUFBQSxNQUFBLEtBQUEsRUFBQThFLEVBQUE5RSxFQUFBLEVBQUEsTUFBQSxLQUFBLEVBQUE4RSxFQUFBL0UsRUFBQSxFQUFBOEUsRUFBQUMsRUFBQWxFLEVBQUEyRCxHQUFBLEVBQUFDLEVBQUFLLEVBQUEsS0FBQSxFQUFBLEdBQUFDLEVBQUEvRSxFQUFBLEVBQUErRSxFQUFBL0UsRUFBQSxHQUFBdUUsR0FBQSxNQUFBRyxFQUFBLE9BQUEsQ0FBQUssRUFBQTlFLEVBQUEsR0FBQSxLQUFBLENBQUEsT0FBQThFLEVBQUE5RSxFQUFBLEdBQUF5RSxFQUFBLFNBQUEsS0FBQSxHQUFBLEdBQUFLLEVBQUEvRSxFQUFBLElBQUF3RSxFQUFBLENBQUFPLEVBQUE5RSxFQUFBLEdBQUEsS0FBQSxDQUFBLE1BQUF3RSxFQUFBLEtBQUEsR0FBQSxPQUFBTSxFQUFBL0MsRUFBQSxJQUFBLEtBQUEsR0FBQSxPQUFBK0MsRUFBQS9DLEVBQUEsR0FBQSxLQUFBLEdBTXRCLE9BSks2QyxFQUFhUCxFQUFRYSxZQUV6QmQsRUFBT2dCLEtBQUtSLEdBQ0wsTUFBUFQsR0FBQUEsRUFBVVMsSUFDWEUsRUFBQW5ELEVBQUEsRUFDTXlDLEVBQU94QyxLQUFLLEtBQUcsRUFBQXFDLEVBQUEsS0FBQSxDQUFBLENBQUEsRUFBQSxDQUFBLEdBQUEsSUFBQSxDQUFBLEVBQUEsRUFBQSxFQUFBLEtBQUEsS0FDdkJ4RixNQUFBQyxLQUFBQyxVQUFBLENBRU0sU0FBUzRCLEVBQ2RDLEVBQ0FDLEVBQ0E0RSxHQUVBLFFBSG1CLElBQW5CNUUsSUFBQUEsRUE5SjJDLFNBK0pkLElBQTdCNEUsSUFBQUEsRUFBZ0MsU0FBQ3JELEdBQU8sT0FBS1ksUUFBUWxELE9BQU91QixNQUFNZSxFQUFRLElBRXJFeEIsRUFDSCxPQUFPLFdBQU8sRUFHaEIsSUFBSThFLEVBQVcsRUFDVEMsRUFBUUMsWUFBWSxXQUN4QkgsRUFBYyxNQUNkQyxHQUFZLElBcEthLEtBcUtlQSxFQXZLTCxHQXVLbUQsR0FFcEZELEVBQWEsSUFBQTNELE9BQUs0RCxhQUV0QixFQUF5QixJQUF0QjdFLEdBSUgsT0FGQTRFLEVBQWEsR0FBQTNELE9BQUlsQixPQUFXa0IsT0F0S2EscURBc0trQixPQUVwRCxXQUNMK0QsY0FBY0YsR0FDZEYsRUFBYyxLQUNoQixDQUNGLENBQUMsU0FPYzNFLEVBQW1CZ0YsR0FBQSxPQUFBQyxFQUFBbEgsTUFBQUMsS0FBQUMsVUFBQSxDQUFBLFNBQUFnSCxJQW9DakMsT0FwQ2lDQSxFQUFBL0csRUFBQUMsSUFBQUMsRUFBbEMsU0FBQThHLEVBQW1DakYsR0FBK0IsSUFBQWtGLEVBQUEzQixFQUFBNEIsRUFBQSxPQUFBakgsSUFBQWdCLEVBQUEsU0FBQWtHLEdBQUEsY0FBQUEsRUFBQWhHLEVBQUFnRyxFQUFBL0YsR0FBQSxLQUFBLEVBQUEsR0FDM0RXLEVBQVcsQ0FBQW9GLEVBQUEvRixFQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUErRixFQUFBcEUsRUFBQSxFQUNQLENBQ0xWLE1BQU8sV0FBTyxFQUNkWSxNQUFLLFdBQUEsSUFBQW1FLEVBQUFwSCxFQUFBQyxJQUFBQyxFQUFFLFNBQUFtSCxJQUFBLE9BQUFwSCxJQUFBZ0IsRUFBQSxTQUFBcUcsR0FBQSxVQUFBLElBQUFBLEVBQUFsRyxFQUFBLE9BQUFrRyxFQUFBdkUsRUFBQSxFQUFBLEVBQUFzRSxFQUFBLElBQUYsT0FBZ0IsV0FBaEIsT0FBQUQsRUFBQXZILE1BQUFDLEtBQUFDLFVBQUEsQ0FBQSxDQUFBLEtBQ04sS0FBQSxFQUtGLE9BRktrSCxFQUFPLFNBQUNNLEdBQ1p2RCxRQUFRbEQsT0FBT3VCLE1BQUssMkNBQUFTLE9BQTRDZixFQUFXLE1BQUFlLE9BQUswRSxPQUFPRCxTQUN6RixFQUFDSixFQUFBaEcsRUFBQSxFQUFBZ0csRUFBQS9GLEVBQUEsRUFHT3FHLEVBQU1DLEVBQVEzRixHQUFjLENBQUU0RixXQUFXLElBQU8sS0FBQSxFQUc3QixPQUZuQnJDLEVBQVNzQyxFQUFrQjdGLEVBQWEsQ0FBRThGLE1BQU8sT0FFaERDLEdBQUcsUUFBU2IsR0FBTUUsRUFBQXBFLEVBQUEsRUFFbEIsQ0FDTFYsTUFBTyxTQUFDRCxHQUNGa0QsRUFBT3lDLFVBQ1R6QyxFQUFPakQsTUFBTUQsRUFFakIsRUFDQWEsTUFBSyxXQUFBLElBQUErRSxFQUFBaEksRUFBQUMsSUFBQUMsRUFBRSxTQUFBK0gsSUFBQSxPQUFBaEksSUFBQWdCLEVBQUEsU0FBQWlILEdBQUEsY0FBQUEsRUFBQTlHLEdBQUEsS0FBQSxFQUFBLE9BQUE4RyxFQUFBOUcsRUFBQSxFQUNDLElBQUlhLFFBQWMsU0FBQ0ssR0FDdkJnRCxFQUFPNkMsSUFBSSxXQUFBLE9BQU03RixHQUFTLEVBQzVCLEdBQUUsS0FBQSxFQUFBLE9BQUE0RixFQUFBbkYsRUFBQSxFQUFBbUYsRUFBQWxHLEdBQUEsRUFBQWlHLEVBQUEsSUFIQyxPQUdELFdBSEMsT0FBQUQsRUFBQW5JLE1BQUFDLEtBQUFDLFVBQUEsQ0FBQSxDQUFBLEtBSU4sS0FBQSxFQUVXLE9BRlhvSCxFQUFBaEcsRUFBQSxFQUFBK0YsRUFBQUMsRUFBQW5GLEVBRURpRixFQUFJQyxHQUFRQyxFQUFBcEUsRUFBQSxFQUNMLENBQ0xWLE1BQU8sV0FBTyxFQUNkWSxNQUFLLFdBQUEsSUFBQW1GLEVBQUFwSSxFQUFBQyxJQUFBQyxFQUFFLFNBQUFtSSxJQUFBLE9BQUFwSSxJQUFBZ0IsRUFBQSxTQUFBcUgsR0FBQSxVQUFBLElBQUFBLEVBQUFsSCxFQUFBLE9BQUFrSCxFQUFBdkYsRUFBQSxFQUFBLEVBQUFzRixFQUFBLElBQUYsT0FBZ0IsV0FBaEIsT0FBQUQsRUFBQXZJLE1BQUFDLEtBQUFDLFVBQUEsQ0FBQSxDQUFBLEtBQ04sRUFBQWlILEVBQUEsS0FBQSxDQUFBLENBQUEsRUFBQSxJQUFBLElBRUpELEVBQUFsSCxNQUFBQyxLQUFBQyxVQUFBLENDaFBNLElBQ013SSxFQUFxQix1QkNFckJDLEVBQWMsQ0FBQyxRQUFTLFNBQVUsVUFDekNDLEVBQXFDLElBQUlDLE9BQU0sTUFBQTVGLE9ESnBCLHNCQ0k0QyxPQUFPLEtBWXBGLFNBQXNCNkYsRUFBbUJqSixFQUFBQyxHQUFBLE9BQUFpSixFQUFBL0ksTUFBQUMsS0FBQUMsVUFBQSxDQXdCeEMsU0FBQTZJLElBQUEsT0FBQUEsRUFBQTVJLEVBQUFDLElBQUFDLEVBeEJNLFNBQUFtRixFQUNMd0QsRUFDQXhJLEdBQStCLElBQUF5SSxFQUFBckksRUFBQXNJLEVBQUEsT0FBQTlJLElBQUFnQixFQUFBLFNBQUFpRixHQUFBLGNBQUFBLEVBQUEvRSxFQUFBK0UsRUFBQTlFLEdBQUEsS0FBQSxFQUErQixZQUEvQixJQUEvQmYsSUFBQUEsRUFBa0MsQ0FBRTJJLGVBQWdCLFdBQVU5QyxFQUFBOUUsRUFBQSxFQUVqQ3lILEVBQU0sS0FBQSxFQUNnRCxPQUQ3RUMsRUFBYzVDLEVBQUFsRSxFQUNkdkIsRUFBbUJrQixFQUFtQnNILEVBQWU1SSxFQUFRMkksaUJBQWdCOUMsRUFBQS9FLEVBQUEsRUFBQStFLEVBQUE5RSxFQUFBLEVBSXpFYSxRQUFRQyxJQUNac0csRUFBWVUsSUFBR2xKLEVBQUFDLElBQUFDLEVBQUMsU0FBQUMsRUFBT2dKLEdBQUssSUFBQUMsRUFBQUMsRUFBQUMsRUFBQXRJLEVBQUEsT0FBQWYsSUFBQWdCLEVBQUEsU0FBQUMsR0FBQSxjQUFBQSxFQUFBRSxHQUFBLEtBQUEsRUFBQSxPQUFBRixFQUFBRSxFQUFBLEVBRWxCbUksRUFBZ0JKLEVBQU9MLEVBQWdCLENBQzNDbEgsYUFBYSxJQUNiLEtBQUEsRUFDRSxPQUpBWixFQUFNRSxFQUFBYyxFQUlWd0gsT0FBSXRJLEVBQUE2QixFQUFBLFNBQUFxRyxFQUNrQixPQURsQkMsR0FDQ0MsRUFBQWpKLEdBQVFvSixnQkFBUyxFQUFqQkosRUFBQUssS0FBQUosRUFBb0JILEVBQU9uSSxJQUFPb0ksRUFBQSxNQUFBdEcsT0FBVTZHLEVBQWlCUixHQUFNLFFBQUFyRyxPQUFPOUIsSUFBTSxFQUFBYixFQUFBLE1BRTFGLEtBQUEsRUFDd0QsT0FYckQ0SSxFQUFPN0MsRUFBQWxFLEVBV1g0SCxPQUFPLFNBQUM1SSxHQUFNLFlBQWtDNkksSUFBWDdJLENBQW9CLEdBQUFrRixFQUFBbkQsRUFBQSxFQUNwRGdHLEVBQVF4RixPQUFTLEVBQUl3RixFQUFRL0YsS0FBSyxRQUFVdUYsR0FBa0IsS0FBQSxFQUVsRCxPQUZrRHJDLEVBQUEvRSxFQUFBLEVBRXJFVixJQUFtQnlGLEVBQUEvQyxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUErQyxFQUFBbkQsRUFBQSxHQUFBLEVBQUFzQyxFQUFBLEtBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxJQUFBLEtBRXRCeEYsTUFBQUMsS0FBQUMsVUFBQSxDQUVELFNBQXNCd0osRUFBZXJFLEVBQUFDLEVBQUEyQixHQUFBLE9BQUFnRCxFQUFBakssTUFBQUMsS0FBQUMsVUFBQSxDQVNwQyxTQUFBK0osSUFBQSxPQUFBQSxFQUFBOUosRUFBQUMsSUFBQUMsRUFUTSxTQUFBbUgsRUFDTDhCLEVBQ0FOLEVBQ0F4SSxHQUE0QixJQUFBNEYsRUFBQWlCLEVBQUE2QyxFQUFBLE9BQUE5SixJQUFBZ0IsRUFBQSxTQUFBcUcsR0FBQSxjQUFBQSxFQUFBbEcsR0FBQSxLQUFBLEVBRTBCLFlBRjFCLElBQTVCZixJQUFBQSxFQUErQixDQUFBLEdBQUU0RixFQUUxQnhHLEVBQXNCeUgsRUFBQzhDLEVBQWtCRCxFQUFDWixFQUFLN0IsRUFBQWxHLEVBQUEsRUFBUXlILEVBQU0sS0FBQSxFQUFBLE9BQUF2QixFQUFBdkUsRUFBQSxFQUFBa0QsRUFBQWlCLEVBQUE2QyxFQUFBekMsRUFBQXRGLEdBQUcsQ0FDckVELFlBQWFrSSxFQUFpQmQsR0FDOUJ2SCxpQkFBcUNpSSxJQUF4QnhKLEVBQVF1QixZQUE0QnFILEVBQWVVLEVBQWlCUixJQUFVOUksRUFBUXVCLGVBQ3BHLEVBQUF5RixFQUFBLEtBQ0Z4SCxNQUFBQyxLQUFBQyxVQUFBLENBRUQsU0FBU2lLLEVBQW1CYixFQUFrQk4sR0FDNUMsT0FBUU0sR0FDTixJQUFLLFFBQ0gsTUFBTyxDQUFDLE1BQU8sUUFBUyx1QkFBd0IsT0FBUSw2Q0FBOENOLEdBQ3hHLElBQUssU0FDSCxNQUFPLENBQUMsU0FBVSxpQ0FBa0MsS0FBTUEsR0FDNUQsSUFBSyxTQUNILE1BQU8sQ0FDTCxNQUNBLFFBQ0EsNkJBQ0Esa0JBQ0EsT0FDQSxVQUNBLHlCQUNBLEtBQ0FBLEdBR1IsQ0FFTyxTQUFTYyxFQUFpQlIsR0FDL0IsT0FBUUEsR0FDTixJQUFLLFFBQ0gsTUFBTyxRQUNULElBQUssU0FDSCxNQUFPLGNBQ1QsSUFBSyxTQUNILE1BQU8sYUFFYixDQU1BLFNBQVNGLEVBQWVpQixHQUN0QixNQUFBLGVBQUFwSCxPQUFzQm9ILEVBQU0sY0FDOUIsQ0FFQSxTQUFTRCxFQUFpQmQsR0FDeEIsTUFBQSxRQUFBckcsT0FBZXFHLEVBQUssS0FBQXJHLFFBSWRxSCxFQUFNLElBQUlDLEtBT0FDLEVBQUEzSCxFQU4yQixDQUN6Q3lILEVBQUlHLFdBQWEsRUFDakJILEVBQUlJLFVBQ0pKLEVBQUlLLFdBQ0pMLEVBQUlNLGFBQ0pOLEVBQUlPLGNBQ0p4QixJQUFJeUIsR0FBVSxHQU5UQyxFQUFLUCxFQUFBLEdBQUVRLEVBQUdSLEVBQUEsR0FBRVMsRUFBSVQsRUFBQSxHQUFFVSxFQUFNVixFQUFBLEdBQUVXLEVBQU1YLEVBQUEsR0FPdkMsR0FBQXZILE9BQVU4SCxHQUFLOUgsT0FBRytILEVBQUcsS0FBQS9ILE9BQUlnSSxHQUFJaEksT0FBR2lJLEdBQU1qSSxPQUFHa0ksSUFaSSxRQUcvQyxJQUNRYixFQU9VRSxFQU5UTyxFQUFPQyxFQUFLQyxFQUFNQyxFQUFRQyxDQUpuQyxDQWNBLFNBQVNMLEVBQVU1RyxHQUNqQixPQUFPQSxFQUFNa0gsV0FBV0MsU0FBUyxFQUFHLElBQ3RDLENDM0dPLElBQU1DLEdBQXVCLENBQUVDLFdBQVksVUFBV0MsVUFBVyxHQ2lDakUsU0FBU0MsR0FBU2xJLEdBQ3ZCbUksRUFBY2xKLE1BQUssR0FBQVMsT0FBSU0sUUFDekIsQ0FFTyxTQUFTb0ksR0FBY3BJLEVBQWlCWCxRQUFJLElBQUpBLElBQUFBLEVBQU8sR0FDcEQ4SSxFQUFjbEosTUFBSyxHQUFBUyxPQUFJTSxTQUN2QlksUUFBUVEsS0FBSy9CLEVBQ2YsQ0FFQSxTQUFzQmdKLEtBQWEsT0FBQUMsR0FBQTdMLE1BQUFDLEtBQUFDLFVBQUEsQ0FLbEMsU0FBQTJMLEtBQUEsT0FBQUEsR0FBQTFMLEVBQUFDLElBQUFDLEVBTE0sU0FBQUMsSUFBQSxPQUFBRixJQUFBZ0IsRUFBQSxTQUFBQyxHQUFBLGNBQUFBLEVBQUFFLEdBQUEsS0FBQSxFQUFBLElBQ0R1SyxFQUFhQyxNQUFLLENBQUExSyxFQUFBRSxFQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUFGLEVBQUE2QixFQUFBLEVBQ2IsSUFBRSxLQUFBLEVBQUEsT0FBQTdCLEVBQUFFLEVBQUEsRUFFRWUsRUFBYXdKLEdBQWEsS0FBQSxFQUFBLE9BQUF6SyxFQUFBNkIsRUFBQSxFQUFBN0IsRUFBQWMsR0FBQSxFQUFBN0IsRUFBQSxLQUN4Q04sTUFBQUMsS0FBQUMsVUFBQSxDQUVELFNBQXNCOEwsR0FBcUJuTSxHQUFBLE9BQUFvTSxHQUFBak0sTUFBQUMsS0FBQUMsVUFBQSxDQU0xQyxTQUFBK0wsS0FBQSxPQUFBQSxHQUFBOUwsRUFBQUMsSUFBQUMsRUFOTSxTQUFBbUYsRUFBcUMwRyxHQUFZLElBQUFDLEVBQUEsT0FBQS9MLElBQUFnQixFQUFBLFNBQUFpRixHQUFBLGNBQUFBLEVBQUE5RSxHQUFBLEtBQUEsRUFBc0MsWUFBdEMsSUFBWjJLLElBQUFBLEVBQWUscUNBQW1DN0YsRUFBQTlFLEVBQUEsRUFDeEVxSyxLQUFlLEtBQUEsRUFBeEIsTUFBTE8sRUFBSzlGLEVBQUFsRSxHQUNEdUIsT0FBUyxHQUFDLENBQUEyQyxFQUFBOUUsRUFBQSxFQUFBLEtBQUEsQ0FBQSxPQUFBOEUsRUFBQW5ELEVBQUEsRUFDWGlKLEdBQUssS0FBQSxFQUVkUixHQUFjTyxFQUFjLEdBQUcsS0FBQSxFQUFBLE9BQUE3RixFQUFBbkQsRUFBQSxHQUFBLEVBQUFzQyxFQUFBLEtBQ2hDeEYsTUFBQUMsS0FBQUMsVUFBQSxDQUVELFNBQXNCa00sR0FBVXRNLEVBQUF1RixHQUFBLE9BQUFnSCxHQUFBck0sTUFBQUMsS0FBQUMsVUFBQSxDQW1EL0IsU0FBQW1NLEtBQUEsT0FBQUEsR0FBQWxNLEVBQUFDLElBQUFDLEVBbkRNLFNBQUFtSCxFQUEwQmpILEVBQW1CQyxHQUEwQixJQUFBOEwsRUFBQUMsRUFBQXZJLEVBQUF3SSxFQUFBQyxFQUFBLE9BQUFyTSxJQUFBZ0IsRUFBQSxTQUFBaUgsR0FBQSxjQUFBQSxFQUFBOUcsR0FBQSxLQUFBLE9BQUEsSUFBMUJmLElBQUFBLEVBQTZCLENBQUEsR0FDekUrTCxFQUEyQyxPQUEzQkQsRUFBRzlMLEVBQVErTCxrQkFBZ0JELEVBQUksR0FBRXRJLEVBQUE1RCxJQUFBQyxXQUFBMkQsSUFBQSxJQUFBMEksRUFBQWhNLEVBQUFpTSxFQUFBQyxFQUFBak0sRUFBQUcsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQSxPQUFBZixJQUFBZ0IsRUFBQSxTQUFBcUcsR0FBQSxjQUFBQSxFQUFBbkcsRUFBQW1HLEVBQUFsRyxHQUFBLEtBQUEsRUFlbEQsT0FaR2IsRUFBT2MsRUFBZ0IsT0FBWGtMLEVBQUNuTSxFQUFRLElBQUVtTSxFQUFJLEdBQUluTSxFQUFRa0IsTUFBTSxHQUFJLENBQ3JEQyxVQUFVLEVBQ1ZDLE1BQU8sQ0FBQyxPQUFRLE9BQVEsVUFHdEJpTCxHQUFRLEVBQ05qTSxFQUFpQmlCLEVBQXFCbEIsR0FBSytHLEVBQUFuRyxFQUFBLE9BRXJCMEksSUFBdEJ4SixFQUFRcU0sVUFDVm5NLEVBQUtvTSxNQUFNeEUsSUFBSTlILEVBQVFxTSxXQUV2Qm5NLEVBQUtvTSxNQUFNeEUsTUFDWmIsRUFBQWxHLEVBQUEsRUFFd0NhLFFBQVFDLElBQUksQ0FDbkRDLEVBQWE1QixFQUFLTSxRQUNsQnNCLEVBQWE1QixFQUFLTyxRQUNsQixJQUFJbUIsUUFBZ0IsU0FBQ0ssRUFBU0MsR0FDNUJoQyxFQUFLaUMsS0FBSyxRQUFTRCxHQUNuQmhDLEVBQUtpQyxLQUFLLFFBQVMsU0FBQ0MsR0FBSSxPQUFLSCxRQUFRRyxFQUFBQSxFQUFRLEVBQUUsRUFDakQsS0FDQSxLQUFBLEVBQytCLEdBRC9COUIsRUFBQTJHLEVBQUF0RixFQUFBcEIsRUFBQThCLEVBQUEvQixFQUFBLEdBUEtFLEVBQU1ELEVBQUEsR0FBRUUsRUFBTUYsRUFBQSxHQUFFRyxFQUFRSCxFQUFBLEdBUXpCSSxLQUFNOEIsT0FBTWpDLEdBQU1pQyxPQUFHaEMsSUFFdkJOLEVBQWVtQyxXQUFVLENBQUEyRSxFQUFBbEcsRUFBQSxFQUFBLEtBQUEsQ0FDM0JvTCxFQUFpQjNKLEVBQW9CN0IsRUFBUVIsRUFBZWtCLFVBQVd0QixHQUFTa0gsRUFBQWxHLEVBQUEsRUFBQSxNQUFBLEtBQUEsRUFBQSxHQUMxRCxJQUFiTCxJQUFrQnFMLEVBQWlCUSxTQUFTN0wsR0FBUyxDQUFBdUcsRUFBQWxHLEVBQUEsRUFBQSxLQUFBLENBQUEsT0FBQWtHLEVBQUF2RSxFQUFBLEVBQUEsQ0FBQWYsRUFDdkRoQixJQUFNLEtBQUEsRUFDSjZMLEdBQXFCek0sRUFBU1csRUFBVUMsSUFBV3NMLEVBM0R0QyxFQTREdEJHLEdBQVEsRUFFUkQsRUFBaUJ4TCxHQUFNLG1CQUFBOEIsT0FBdUIxQyxFQUFRNEMsS0FBSyxNQUM1RCxLQUFBLEVBRXNCLE9BRnRCc0UsRUFBQW5HLEVBQUEsRUFFRFgsRUFBZTBDLFFBQVFvRSxFQUFBbkUsRUFBQSxHQUFBLEtBQUEsRUFBQSxJQUdyQnNKLEVBQUssQ0FBQW5GLEVBQUFsRyxFQUFBLEVBQUEsS0FBQSxDQUNvRyxPQUEzR2tLLEdBQVEsc0RBQUF4SSxPQUF1RHdKLEVBQU8sUUFBQXhKLE9BQU9nSyxFQUF5QixNQUFLeEYsRUFBQWxHLEVBQUEsRUFDckcyTCxFQXJFbUIsSUFxRVlULEdBQVEsS0FBQSxFQUFBLE9BQUFoRixFQUFBdkUsRUFBQSxFQUFBLEdBQUEsS0FBQSxFQUczQ3lKLEdBQ0ZoQixHQUFjZ0IsR0FDZixLQUFBLEVBQUEsT0FBQWxGLEVBQUF2RSxFQUFBLEdBQUEsRUFBQWMsRUFBQSxLQUFBLENBQUEsQ0FBQSxHQUFBLEVBQUEsSUFBQSxHQTdDTXlJLEVBQVUsRUFBQyxLQUFBLEVBQUEsS0FBRUEsR0E5Qk0sR0E4QjBCLENBQUFwRSxFQUFBOUcsRUFBQSxFQUFBLEtBQUEsQ0FBQSxPQUFBOEcsRUFBQThFLEVBQUFDLEVBQUFwSixLQUFBLEdBQUEsS0FBQSxFQUFBLEdBQUEsS0FBQXdJLEVBQUFuRSxFQUFBbEcsR0FBQSxDQUFBa0csRUFBQTlHLEVBQUEsRUFBQSxLQUFBLENBQUEsT0FBQThHLEVBQUFuRixFQUFBLEVBQUEsR0FBQSxLQUFBLEVBQUEsSUFBQXNKLEVBQUEsQ0FBQW5FLEVBQUE5RyxFQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUE4RyxFQUFBbkYsRUFBQSxFQUFBc0osRUFBQXJLLEdBQUEsS0FBQSxFQUFFc0ssR0FBVyxFQUFDcEUsRUFBQTlHLEVBQUEsRUFBQSxNQUFBLEtBQUEsRUErQ3BFb0ssR0FBYSx3QkFBQTFJLE9BN0VlLGlCQTZFK0JBLE9BQWMxQyxFQUFRNEMsS0FBSyxPQUFRLEtBQUEsRUFBQSxPQUFBa0YsRUFBQW5GLEVBQUEsR0FBQSxFQUFBc0UsRUFBQSxJQUMvRjZFLEdBQUFyTSxNQUFBQyxLQUFBQyxVQUFBLENBRUQsU0FBc0JtTixHQUFFL0gsRUFBQTJCLEdBQUEsT0FBQXFHLEdBQUF0TixNQUFBQyxLQUFBQyxVQUFBLENBRXZCLFNBQUFvTixLQUFBLE9BQUFBLEdBQUFuTixFQUFBQyxJQUFBQyxFQUZNLFNBQUErSCxFQUFrQm1GLEVBQWdCVixHQUFrQixPQUFBek0sSUFBQWdCLEVBQUEsU0FBQXFILEdBQUEsY0FBQUEsRUFBQWxILEdBQUEsS0FBQSxFQUFBLE9BQUFrSCxFQUFBbEgsRUFBQSxFQUM1QzZLLElBQVksTUFBSW5KLE9BQUF1SyxFQUFLRCxJQUFPLENBQUVWLFVBQUFBLElBQVksS0FBQSxFQUFBLE9BQUFwRSxFQUFBdkYsRUFBQSxFQUFBdUYsRUFBQXRHLEdBQUEsRUFBQWlHLEVBQUEsS0FDeERwSSxNQUFBQyxLQUFBQyxVQUFBLENBRUQsU0FBc0J1TixHQUFnQkMsRUFBQUMsRUFBQUMsR0FBQSxPQUFBQyxHQUFBN04sTUFBQUMsS0FBQUMsVUFBQSxDQU1yQyxTQUFBMk4sS0FBQSxPQUFBQSxHQUFBMU4sRUFBQUMsSUFBQUMsRUFOTSxTQUFBbUksRUFDTCtFLEVBQ0FoQixFQUNBTSxHQUFrQixPQUFBek0sSUFBQWdCLEVBQUEsU0FBQWtHLEdBQUEsY0FBQUEsRUFBQS9GLEdBQUEsS0FBQSxFQUFBLE9BQUErRixFQUFBL0YsRUFBQSxFQUVMNkssSUFBWSxNQUFJbkosT0FBQXVLLEVBQUtELElBQU8sQ0FBRVYsVUFBQUEsRUFBV04saUJBQUFBLElBQW1CLEtBQUEsRUFBQSxPQUFBakYsRUFBQXBFLEVBQUEsRUFBQW9FLEVBQUFuRixHQUFBLEVBQUFxRyxFQUFBLEtBQzFFeEksTUFBQUMsS0FBQUMsVUFBQSxDQUVELFNBQXNCNE4sS0FBZ0IsT0FBQUMsR0FBQS9OLE1BQUFDLEtBQUFDLFVBQUEsQ0FPckMsU0FBQTZOLEtBQUEsT0FBQUEsR0FBQTVOLEVBQUFDLElBQUFDLEVBUE0sU0FBQThHLElBQUEsSUFBQTZHLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUEsT0FBQWhPLElBQUFnQixFQUFBLFNBQUFpTixHQUFBLGNBQUFBLEVBQUE5TSxHQUFBLEtBQUEsRUFBQSxPQUFBOE0sRUFBQTlNLEVBQUEsRUFDd0I4TCxHQUFHLENBQUMsT0FBUSxPQUFRLFNBQVUsZ0JBQWlCLE9BQVEsbUJBQWtCLEtBQUEsRUFJckcsT0FKS1csRUFBYUssRUFBQWxNLEVBQXFGd0gsT0FBSXNFLEVBQ3RGRCxFQUFjTSxNQUFNLElBQUssR0FBRUosRUFBQXJMLEVBQUFvTCxFQUFBLEdBQTFDRSxFQUFLRCxFQUFBLEdBQUVFLEVBQUlGLEVBQUEsR0FDYkMsR0FBVUMsR0FDYnpDLEdBQWMsaURBQ2YwQyxFQUFBbkwsRUFBQSxFQUNNLENBQUNpTCxFQUFPQyxJQUFLLEVBQUFqSCxFQUFBLEtBQ3JCbkgsTUFBQUMsS0FBQUMsVUFBQSxDQUVELFNBQXNCcU8sS0FBZSxPQUFBQyxHQUFBeE8sTUFBQUMsS0FBQUMsVUFBQSxDQUVwQyxTQUFBc08sS0FBQSxPQUFBQSxHQUFBck8sRUFBQUMsSUFBQUMsRUFGTSxTQUFBb08sSUFBQSxPQUFBck8sSUFBQWdCLEVBQUEsU0FBQXNOLEdBQUEsY0FBQUEsRUFBQW5OLEdBQUEsS0FBQSxFQUFBLE9BQUFtTixFQUFBbk4sRUFBQSxFQUNTOEwsR0FBRyxDQUFDLEtBQU0sT0FBUSxTQUFVLFNBQVUsT0FBUSxZQUFXLEtBQUEsRUFBQSxPQUFBcUIsRUFBQXhMLEVBQUEsRUFBQXdMLEVBQUF2TSxFQUFFd0gsUUFBSSxFQUFBOEUsRUFBQSxLQUM5RXpPLE1BQUFDLEtBQUFDLFVBQUEsQ0FFRCxTQUFzQnlPLEdBQU9DLEVBQUFDLEdBQUEsT0FBQUMsR0FBQTlPLE1BQUFDLEtBQUFDLFVBQUEsQ0FtQjVCLFNBQUE0TyxLQUFBLE9BQUFBLEdBQUEzTyxFQUFBQyxJQUFBQyxFQW5CTSxTQUFBME8sRUFDTEMsRUFDQUMsR0FBaUQsSUFBQTFCLEVBQUEyQixFQUFBQyxFQUFBQyxFQUFBQyxFQUFBbkwsRUFBQW9MLEVBQUFDLEVBQUFuSixFQUFBLE9BQUFoRyxJQUFBZ0IsRUFBQSxTQUFBb08sR0FBQSxjQUFBQSxFQUFBak8sR0FBQSxLQUFBLE9BQUEsSUFBakQwTixJQUFBQSxFQUFvRCxDQUFBLEdBRTlDMUIsRUFBTyxDQUFDLE1BQU8sVUFBVyxLQUFNLFlBQVcyQixFQUFBLEVBQUFDLEVBQ3RCTSxPQUFPQyxRQUFRVCxHQUFLLEtBQUEsRUFBQSxLQUFBQyxFQUFBQyxFQUFBekwsUUFBQSxDQUFBOEwsRUFBQWpPLEVBQUEsRUFBQSxLQUFBLENBQXpCLEdBQXlCNk4sRUFBQXZNLEVBQUFzTSxFQUFBRCxHQUFBLEdBQW5DRyxFQUFHRCxFQUFBLFFBQ0NwRixLQURDOUYsRUFBS2tMLEVBQUEsS0FDaUIsS0FBVmxMLEVBQVksQ0FBQXNMLEVBQUFqTyxFQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUFpTyxFQUFBdE0sRUFBQSxFQUFBLEdBQUEsS0FBQSxFQUd2Q3FLLEVBQUs1RyxLQUFLLEtBQUksR0FBQTFELE9BQUtvTSxFQUFHLEtBQUFwTSxPQUFJaUIsSUFBUyxLQUFBLEVBQUFnTCxJQUFBTSxFQUFBak8sRUFBQSxFQUFBLE1BQUEsS0FBQSxFQUdoQixPQUhnQjZFLEVBR3BCdUosS0FBSUgsRUFBQWpPLEVBQUEsRUFBYThMLEdBQUdFLEVBQU15QixHQUFNLEtBQUEsRUFBdEIsR0FBckJNLEVBQVFsSixFQUFRd0osTUFBSy9GLEtBQUF6RCxFQUFBb0osRUFBQXJOLEdBQ3RCME4sTUFBTUMsUUFBUVIsRUFBU1MsUUFBTyxDQUFBUCxFQUFBak8sRUFBQSxFQUFBLEtBQUEsQ0FBQSxPQUFBaU8sRUFBQXRNLEVBQUEsRUFDMUJvTSxHQUFRLEtBQUEsRUFHWEMsRUFBZ0JELEVBQVNTLE9BQU8xRyxJQUFJLFNBQUMzQixHQUFLLElBQUFzSSxFQUFBLE9BQWtCLE9BQWxCQSxFQUFLdEksRUFBTW5FLFNBQU95TSxFQUFJLHVCQUF1QixHQUFFN00sS0FBSyxNQUNwR3dJLEdBQWEsdUJBQUExSSxPQUF3QnNNLElBQWlCLEtBQUEsRUFBQSxPQUFBQyxFQUFBdE0sRUFBQSxHQUFBLEVBQUE2TCxFQUFBLEtBQ3ZEL08sTUFBQUMsS0FBQUMsVUFBQSxDQUVNLFNBQVMrUCxHQUFTQyxHQUN2QixPQUFPQyxFQUFjRCxFQUFNNUUsR0FDN0IsQ0FFTyxTQUFTOEUsR0FBWUYsR0FDMUIsT0FBT1AsS0FBS0MsTUFBTUQsS0FBS1UsVUFBVUgsR0FDbkMsQ0FNTyxTQUFTSSxHQUFjL1AsRUFBbUJzTSxHQUEwRCxJQUFBcE0sRUFBQThQLEVBQUFDLEVBQUFDLEVBQ25HQyxFQUFTQyxTQUFTbFEsRUFBQ0YsRUFBUSxJQUFFRSxFQUFJLEdBQUlGLEVBQVFrQixNQUFNLEdBQUksQ0FDM0RtUCxTQUFVLE9BQ1Z6RSxNQUFPVSxJQUdULE1BQU8sQ0FDTDNMLFNBQXVCLE9BQWZxUCxFQUFFRyxFQUFPRyxRQUFNTixFQUFLRyxFQUFPaEosTUFBUSxFQUFJLEVBQy9DdkcsT0FBTSxHQUFBOEIsT0FBa0IsT0FBbEJ1TixFQUFLRSxFQUFPMVAsUUFBTXdQLEVBQUksSUFBRXZOLE9BQWdCLE9BQWhCd04sRUFBR0MsRUFBT3pQLFFBQU13UCxFQUFJLElBRXRELENBRUEsU0FBU3pELEdBQXFCek0sRUFBbUJXLEVBQWtCQyxHQUNqRSxNQUFtQixPQUFmWixFQUFRLElBQTRCLElBQWJXLEdBSXBCLDBFQUEwRTRQLEtBQUszUCxFQUN4RixDQy9LTyxJQUFNNFAsR0FBdUIsWUFNdkJDLEdBQTJCLENBQ3RDLFVBQ0EsYUFDQSxZQUNBLGFBQ0EsZUFDQSxRQUNBLGFBQ0EsVUFDQSxPQUNBLE9BQ0EsU0FDQSxZQUNBLFNBQ0EsWUFDQSxNQUNBLGdCQXdFSUMsR0FBaUMsa0RBQ2pDQyxHRDJEc0QsSUFBbkRaLEdBQWMsQ0MzRGUsTUQyREwsY0FBY3BQLFNDekQvQyxTQUFzQmlRLEdBQWlCdFIsR0FBQSxPQUFBdVIsR0FBQXBSLE1BQUFDLEtBQUFDLFVBQUEsQ0FvQ3RDLFNBQUFrUixLQUFBLE9BQUFBLEdBQUFqUixFQUFBQyxJQUFBQyxFQXBDTSxTQUFBQyxFQUFpQytRLEdBQWlCLElBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFuRSxFQUFBb0UsRUFBQUMsRUFBQUMsRUFBQXpMLEVBQUEsT0FBQWhHLElBQUFnQixFQUFBLFNBQUFDLEdBQUEsY0FBQUEsRUFBQUMsRUFBQUQsRUFBQUUsR0FBQSxLQUFBLEVBTy9CLE9BTmxCZ00sRUFBTyxDQUFDLEtBQU0sVUFDaEI4RCxHQUNGOUQsRUFBSzVHLEtBQUswSyxHQUVaOUQsRUFBSzVHLEtBQUssU0FBVSwyRUFFaEJnTCxFQUFrQixHQUFFdFEsRUFBQUMsRUFBQSxFQUFBRCxFQUFBRSxFQUFBLEVBRUprTSxHQUFpQkYsRUFBTSxDQUFDLElBQUcsS0FBQSxFQUF2Q3FFLEVBQUd2USxFQUFBYyxFQUNUd1AsRUFBU0MsRUFBSWpJLE9BQU9qRyxPQUFTLEVBQUtpTSxLQUFLQyxNQUFNZ0MsR0FBbUIsR0FBR3ZRLEVBQUFFLEVBQUEsRUFBQSxNQUFBLEtBQUEsRUFBQSxHQUFBRixFQUFBQyxFQUFBLEtBQUE4RSxFQUFBL0UsRUFBQWMsYUFFOUMyUCxhQUFXLENBQUF6USxFQUFBRSxFQUFBLEVBQUEsS0FBQSxDQUM5Qm9RLEVBQVMsR0FBR3RRLEVBQUFFLEVBQUEsRUFBQSxNQUFBLEtBQUEsRUFBQSxNQUFBNkUsRUFBQSxLQUFBLEVBVVYsT0FKQXlMLEVBQVVGLEVBQU9JLE9BQStCLFNBQUNDLEVBQVFDLEdBQVUsSUFBQUMsRUFBQUMsRUFDakVDLEVBQXFCLE9BQWZGLEVBQUdELEVBQU1HLFFBQU1GLEVBQUksR0FFL0IsT0FEQUYsRUFBT0ksSUFBeUIsT0FBZkQsRUFBQ0gsRUFBT0ksSUFBT0QsRUFBSSxHQUFLLEVBQ2xDSCxDQUNULEVBQUcsQ0FBQSxHQUFHM1EsRUFBQTZCLEVBQUEsRUFFQyxDQUNMMk8sUUFBUyxDQUNQUSxNQUFPVixFQUFPak8sT0FDZDRPLEtBQWtCLE9BQWRoQixFQUFFTyxFQUFRUyxNQUFJaEIsRUFBSSxFQUN0QmlCLEtBQWtCLE9BQWRoQixFQUFFTSxFQUFRVSxNQUFJaEIsRUFBSSxFQUN0QmlCLFFBQXdCLE9BQWpCaEIsRUFBRUssRUFBUVcsU0FBT2hCLEVBQUksRUFDNUJpQixTQUEwQixPQUFsQmhCLEVBQUVJLEVBQVFZLFVBQVFoQixFQUFJLEVBQzlCaUIsT0FBc0IsT0FBaEJoQixFQUFFRyxFQUFRYSxRQUFNaEIsRUFBSSxHQUU1QkMsT0FBQUEsSUFDRCxFQUFBclIsRUFBQSxLQUFBLENBQUEsQ0FBQSxFQUFBLElBQUEsS0FDRk4sTUFBQUMsS0FBQUMsVUFBQSxDQUVELFNBQXNCeVMsR0FBa0M3UyxFQUFBdUYsRUFBQUMsRUFBQTJCLEdBQUEsT0FBQTJMLEdBQUE1UyxNQUFBQyxLQUFBQyxVQUFBLENBb0N2RCxTQUFBMFMsS0FBQSxPQUFBQSxHQUFBelMsRUFBQUMsSUFBQUMsRUFwQ00sU0FBQW1GLEVBQ0w2TCxFQUNBd0IsRUFDQUMsRUFDQUMsR0FBMEMsSUFBQUMsRUFBQUMsRUFBQXJTLEVBQUFzUyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBLE9BQUFsVCxJQUFBZ0IsRUFBQSxTQUFBaUYsR0FBQSxjQUFBQSxFQUFBL0UsRUFBQStFLEVBQUE5RSxHQUFBLEtBQUEsRUFFMUIsWUFKMkIsSUFBM0NzUixJQUFBQSxFQUE4Q1UsU0FDMEIsSUFBeEVULElBQUFBLEVBQTJFM0IsU0FDakMsSUFBMUM0QixJQUFBQSxFQUE2QyxTQUFDeFAsR0FBTyxPQUFLbUksRUFBY2xKLE1BQU1lLEVBQVEsR0FFbEZ5UCxFQUFXLEVBQUMzTSxFQUFBOUUsRUFBQSxFQUNNdVIsRUFBa0J6QixHQUFTLEtBQUEsRUFBN0M0QixFQUFTNU0sRUFBQWxFLEVBQ1R2QixFQUFtQixXQUFPLEVBQUN5RixFQUFBL0UsRUFBQSxFQUFBLEtBQUEsRUFLUyxHQUQ5QjRSLEVBQW9CTSxHQUF3QlAsR0FBVUUsRUFDcEJNLEdBQWlEUCxHQUFrQkUsRUFBQXZRLEVBQUFzUSxLQUFwR0UsRUFBYUQsRUFBQSxHQUFFRSxFQUFjRixFQUFBLEtBRWhDM0QsT0FBT2lFLEtBQUtMLEdBQWUzUCxPQUFTLEdBQTRDLElBQXZDK0wsT0FBT2lFLEtBQUtKLEdBQWdCNVAsUUFBWSxDQUFBMkMsRUFBQTlFLEVBQUEsRUFBQSxLQUFBLENBQUEsT0FBQThFLEVBQUFuRCxFQUFBLEVBQzVFLENBQUMrUCxFQUFXRCxHQUFVLElBQU0sS0FBQSxFQUFBLEtBRWpDQSxHQXRKa0MsS0FzSk0sQ0FBQTNNLEVBQUE5RSxFQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUE4RSxFQUFBbkQsRUFBQSxFQUNuQyxDQUFDK1AsRUFBV0QsR0FBVSxJQUFLLEtBQUEsRUFVbkMsT0FOZ0IsS0FEakJBLEdBQVksS0FFVnBTLEVBQW1Ca0IsRUEzSkssZ0RMSGEsR0tpS25DaVIsSUFFSDFNLEVBQUE5RSxFQUFBLEVBQ0tzUixFTHBLaUMsSUtvS1EsS0FBQSxFQUFBLE9BQUF4TSxFQUFBOUUsRUFBQSxFQUM3QnVSLEVBQWtCekIsR0FBUyxLQUFBLEVBQTdDNEIsRUFBUzVNLEVBQUFsRSxFQUFBLEtBQUEsRUFBQWtFLEVBQUE5RSxFQUFBLEVBQUEsTUFBQSxLQUFBLEVBR1EsT0FIUjhFLEVBQUEvRSxFQUFBLEVBR1hWLElBQW1CeUYsRUFBQS9DLEVBQUEsR0FBQSxLQUFBLEdBQUEsT0FBQStDLEVBQUFuRCxFQUFBLEdBQUEsRUFBQXNDLEVBQUEsS0FBQSxDQUFBLENBQUEsR0FBQSxFQUFBLEtBQUEsS0FFdEJ4RixNQUFBQyxLQUFBQyxVQUFBLENBRU0sU0FBU3NULEdBQXdCUCxHQUN0QyxJQUFNVSxFQUEwQlYsRUFBVXRCLE9BQU9JLE9BQWdDLFNBQUM2QixFQUFnQjNCLEdBQVUsSUFDcEc0QixFQUFjNUIsRUFBTTZCLFVBQVk3QixFQUFNN0QsTUFBUSxtQkFHcEQsT0FGMkIsTUFBM0J3RixFQUFlQyxLQUFmRCxFQUFlQyxHQUFpQixJQUNoQ0QsRUFBZUMsR0FBYWxOLEtBQUtzTCxHQUMxQjJCLENBQ1QsRUFBRyxDQUFBLEdBRUgsT0FBT25FLE9BQU9zRSxZQUNadEUsT0FBT0MsUUFBUWlFLEdBQXlCdEssSUFBSSxTQUFBMkssR0FBMkIsSUFBQUMsRUFBQUMsRUFBQXJSLEVBQUFtUixFQUFBLEdBQXpCSCxFQUFXSyxFQUFBLEdBQ2pEQyxFQXlFTCxTQUFpQ3hDLEdBQ3RDLElBQU15QyxFQUFTekMsRUFBT0ksT0FBTyxTQUFDc0MsRUFBZXBDLEdBQzNDLElBQU01QyxFQW1CSCxTQUE0QjRDLEdBQ2pDLElBQU1xQyxFQUFRQyxHQUEyQnRDLEdBQ3pDLE9BQU9xQyxFQUFLLE9BQUFyUixPQUFVcVIsR0FBVSxhQUNsQyxDQXRCZ0JFLENBQW1CdkMsR0FDekJ3QyxFQUFRSixFQUFjSyxJQUFJckYsR0FDaEMsT0FBSW9GLEdBQ0ZBLEVBQU05TixLQUFLc0wsR0FDSm9DLElBRVRBLEVBQWNNLElBQUl0RixFQUFLLENBQUM0QyxJQUNqQm9DLEVBQ1QsRUFBRyxJQUFJTyxLQUVQLE9BQU8vRSxNQUFNZ0YsS0FBS1QsRUFBT1UsVUFBVS9DLE9BQWdCLFNBQUNnRCxFQUFhQyxHQUMvRCxPQUEyQixJQUF2QkQsRUFBWXJSLFFBSVR1UixHQUFxQkQsR0FBZ0JDLEdBQXFCRixHQUh4REMsRUFHc0ZELENBQ2pHLEVBQUcsR0FDTCxDQTVGa0NHLENBRG1DaEIsRUFBQSxJQUV6RGlCLEVBQWFoQixFQUFvQixHQUNsQ2dCLEdBQ0h4SixHQUFhLHVDQUFBMUksT0FBd0M0USxJQUV2RCxJQUFNdUIsRUFNUyxPQU5FbkIsRUFDZkUsRUFBb0JwQyxPQUEwQixTQUFDc0QsRUFBZXBELEdBQzVELE9BQUtvRCxFQUdFQyxHQUFxQnJELEdBQVNxRCxHQUFxQkQsR0FBaUJwRCxFQUFRb0QsRUFGMUVwRCxDQUdYLE9BQUdqSSxJQUFVaUssRUFBSWtCLEVBRW5CLE1BQU8sQ0FDTHRCLEVBQ0EsQ0FDRTBCLGVBQWdCQyxHQUE2QnJCLEdBQzdDbEMsTUFBT21ELEVBQ1B6RCxPQUFRd0MsR0FHZCxHQUVKLENBRU8sU0FBU1YsR0FDZFAsR0FLQSxJQUhBLElBQU1HLEVBQTBELENBQUEsRUFDMURDLEVBQTJELENBQUEsRUFFakVwRSxFQUFBLEVBQUFDLEVBQW9DTSxPQUFPQyxRQUFRd0QsR0FBa0JoRSxFQUFBQyxFQUFBekwsT0FBQXdMLElBQUUsQ0FBbEUsSUFBQUUsRUFBQXZNLEVBQUFzTSxFQUFBRCxHQUFBLEdBQU8yRSxFQUFXekUsRUFBQSxHQUFFc0IsRUFBTXRCLEVBQUEsR0FDQyxXQUExQnNCLEVBQU82RSxlQUltQixZQUExQjdFLEVBQU82RSxnQkFBZ0M3RSxFQUFPaUIsT0FBTzhELEtBQUssU0FBQ3hELEdBQUssT0FBS3lELEdBQWlCekQsRUFBTSxLQUM5RnFCLEVBQWVPLEdBQWVuRCxHQUo5QjJDLEVBQWNRLEdBQWVuRCxDQU1qQyxDQUVBLE1BQU8sQ0FBQzJDLEVBQWVDLEVBQ3pCLENBRU8sU0FBU2lCLEdBQTJCdEMsR0FBOEMsSUFBQTBELEVBQ2pGQyxFQUFZLE1BQUwzRCxPQUFLLEVBQUxBLEVBQU8yRCxLQUNwQixHQUFLQSxFQUdMLE9BQTJDLE9BQTNDRCxFQUFPQyxFQUFLQyxNQUFNLGdDQUF5QixFQUFwQ0YsRUFBdUMsRUFDaEQsQ0FFQSxTQUFzQkcsR0FBV3BJLEdBQUEsT0FBQXFJLEdBQUEvVixNQUFBQyxLQUFBQyxVQUFBLENBbUJoQyxTQUFBNlYsS0FBQSxPQUFBQSxHQUFBNVYsRUFBQUMsSUFBQUMsRUFuQk0sU0FBQW1ILEVBQTJCOE0sR0FBeUIsSUFBQTBCLEVBQUEzTyxFQUFBLE9BQUFqSCxJQUFBZ0IsRUFBQSxTQUFBcUcsR0FBQSxjQUFBQSxFQUFBbkcsRUFBQW1HLEVBQUFsRyxHQUFBLEtBQUEsRUFBQSxHQUNwRCtTLEVBQUssQ0FBQTdNLEVBQUFsRyxFQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUFrRyxFQUFBdkUsRUFBQSxPQUNEOEcsR0FBUyxLQUFBLEVBQUEsT0FBQXZDLEVBQUFsRyxFQUFBLEVBR0lrTSxHQUFpQixDQUFDLE1BQU8sT0FBUTZHLEVBQU8sU0FBVXRELEdBQXlCN04sS0FBSyxNQUFPLENBQUMsSUFBRyxLQUFBLEVBQXBHLEdBQ2lCLEtBRHhCNlMsRUFBT3ZPLEVBQUF0RixHQUNEd0gsT0FBT2pHLE9BQVksQ0FBQStELEVBQUFsRyxFQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUFrRyxFQUFBdkUsRUFBQSxPQUN0QjhHLEdBQVMsS0FBQSxFQUFBLE9BQUF2QyxFQUFBbkcsRUFBQSxFQUFBbUcsRUFBQXZFLEVBQUEsRUFJVHlNLEtBQUtDLE1BQU1vRyxJQUFRLEtBQUEsRUFBQSxHQUFBdk8sRUFBQW5HLEVBQUEsS0FBQStGLEVBQUFJLEVBQUF0RixhQUVMMlAsYUFBVyxDQUFBckssRUFBQWxHLEVBQUEsRUFBQSxLQUFBLENBQ3FFLE9BQW5HbUssRUFBY2xKLE1BQUssa0RBQUFTLE9BQW1EcVIsRUFBSyxNQUFBclIsT0FBS29FLEVBQU05RCxlQUFha0UsRUFBQXZFLEVBQUEsT0FDNUY4RyxHQUFTLEtBQUEsRUFBQSxNQUFBM0MsRUFBQSxLQUFBLEVBQUEsT0FBQUksRUFBQXZFLEVBQUEsR0FBQSxFQUFBc0UsRUFBQSxLQUFBLENBQUEsQ0FBQSxFQUFBLElBQUEsS0FJckJ4SCxNQUFBQyxLQUFBQyxVQUFBLENBNEJNLFNBQVNzVixHQUE2QjdELEdBQzNDLElBQU1zRSxFQUFVdEUsRUFBT3RJLElBQUksU0FBQzRJLEdBQUssSUFBQWlFLEVBQUEsT0FBaUIsT0FBakJBLEVBQUtqRSxFQUFNRyxRQUFNOEQsRUFBSSxFQUFFLEdBQ3hELE9BQUlELEVBQVFSLEtBQUssU0FBQ3JELEdBQU0sT0FBTSxDQUFDLE9BQVEsV0FBWSxXQUFXckYsU0FBU3FGLEVBQU8sR0FDckUsU0FFTDZELEVBQVFsSixTQUFTLFdBQ1osVUFFRixZQUNULENBRU8sU0FBU3VJLEdBQXFCckQsR0FDbkMsSUFDZ0RrRSxFQUQxQ0MsRUFBWW5FLEVBQU1vRSxZQUN4QixPQUFLRCxHQWxTdUIseUJBa1NWQSxFQUdYQSxFQUZpQixPQUF0QkQsRUFBT2xFLEVBQU1xRSxXQUFTSCxFQUFJLEVBRzlCLENBRU8sU0FBU1QsR0FBaUJ6RCxHQUMvQixNQUFPLENBQUNBLEVBQU03RCxLQUFNNkQsRUFBTTZCLFVBQVUyQixLQUFLLFNBQUN2UixHQUFLLE1BQXNCLGlCQUFWQSxHQUFzQjZNLEdBQXFCRCxLQUFLNU0sRUFBTSxFQUNuSCxDQUVBLFNBQXNCcVAsR0FBWTVGLEdBQUEsT0FBQTRJLEdBQUF2VyxNQUFBQyxLQUFBQyxVQUFBLENBRWpDLFNBQUFxVyxLQUFBLE9BQUFBLEdBQUFwVyxFQUFBQyxJQUFBQyxFQUZNLFNBQUErSCxFQUE0Qm9PLEdBQWUsT0FBQXBXLElBQUFnQixFQUFBLFNBQUFpSCxHQUFBLGNBQUFBLEVBQUE5RyxHQUFBLEtBQUEsRUFBQSxPQUFBOEcsRUFBQTlHLEVBQUEsRUFDMUMyTCxFQUFnQixJQUFWc0osR0FBZSxLQUFBLEVBQUEsT0FBQW5PLEVBQUFuRixFQUFBLEdBQUEsRUFBQWtGLEVBQUEsS0FDNUJwSSxNQUFBQyxLQUFBQyxVQUFBLENBRUQsU0FBc0J1VyxLQUFTLE9BQUFDLEdBQUExVyxNQUFBQyxLQUFBQyxVQUFBLENBcUM5QixTQUFBd1csS0FBQSxPQUFBQSxHQUFBdlcsRUFBQUMsSUFBQUMsRUFyQ00sU0FBQThHLElBQUEsSUFBQWtLLEVBQUFzRixFQUFBQyxFQUFBM0QsRUFBQTRELEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUE1RCxFQUFBQyxFQUFBNEQsRUFBQSxPQUFBOVcsSUFBQWdCLEVBQUEsU0FBQWtHLEdBQUEsY0FBQUEsRUFBQS9GLEdBQUEsS0FBQSxFQUFBLE9BQUErRixFQUFBL0YsRUFBQSxFQUNrQmdOLEtBQWlCLEtBQUEsRUFFRSxPQUZwQzhDLEVBQVEvSixFQUFBbkYsRUFFZHNKLEdBQVMsaUNBQWlDbkUsRUFBQS9GLEVBQUEsRUFDWW9SLEdBQW1DdEIsR0FBUyxLQUFBLEVBU2pHLEdBVGlHc0YsRUFBQXJQLEVBQUFuRixFQUFBeVUsRUFBQS9ULEVBQUE4VCxFQUFBLEdBQTNGMUQsRUFBUzJELEVBQUEsR0FBRUMsRUFBWUQsRUFBQSxHQUFFRSxFQUFZRixFQUFBLEdBQ3RDRyxFQUFtQnZELEdBQXdCUCxHQUFVK0QsRUFDbkJ2RCxHQUFpRHNELEdBQWlCRSxFQUFBcFUsRUFBQW1VLEtBQW5HM0QsRUFBYTRELEVBQUEsR0FBRTNELEVBQWMyRCxFQUFBLEdBRTlCQyxFQUFtQyxDQUN2Q3JGLFFBQVN6QixHQUFTNkMsRUFBVXBCLFNBQzVCc0YsK0JBQWdDTixFQUFlLEVBQy9DTyxpQ0FBa0NQLEVBQ2xDUSxrQ0FBbUNQLEtBR2pDckgsT0FBT2lFLEtBQUtMLEdBQWUzUCxPQUFTLEdBQUMsQ0FBQTRELEVBQUEvRixFQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUErRixFQUFBL0YsRUFBQSxFQUNOYSxRQUFRQyxJQUN2Q29OLE9BQU9DLFFBQVEyRCxHQUFlaEssSUFBR2xKLEVBQUFDLElBQUFDLEVBQUMsU0FBQW1JLEVBQUE4TyxHQUFBLElBQUFDLEVBQUExRCxFQUFBbkQsRUFBQThHLEVBQUF0TixFQUFBdU4sRUFBQUMsRUFBQSxPQUFBdFgsSUFBQWdCLEVBQUEsU0FBQXFILEdBQUEsY0FBQUEsRUFBQWxILEdBQUEsS0FBQSxFQUEyQixPQUEzQmdXLEVBQUExVSxFQUFBeVUsRUFBQSxHQUFRekQsRUFBVzBELEVBQUEsR0FBRTdHLEVBQU02RyxFQUFBLEdBQUE5TyxFQUFBbEgsRUFBQSxFQUM3Qm9XLEdBQXNCOUQsRUFBYW5ELEdBQU8sS0FBQSxFQUd6QyxPQUh6QjhHLEVBQWUvTyxFQUFBdEcsRUFBQStILEVBQUEwTixFQUFBSCxFQUFBRyxFQUFBLENBQUEsRUFFaEJKLEdBQWVFLEVBQ2ZHLEdBQTBCcFAsRUFBQWxILEVBQUEsRUFBT3VXLEdBQWtCcEgsRUFBT3VCLE9BQU0sS0FBQSxFQUFBLE9BQUF4SixFQUFBdkYsRUFBQSxFQUFBZ0gsRUFBQXVOLEVBQUFDLEVBQUFqUCxFQUFBdEcsS0FBQSxFQUFBcUcsRUFBQSxNQUd4RSxLQUFBLEVBUnVCLE9BQXhCME8sRUFBUWEsaUJBQWdCelEsRUFBQW5GLEVBQUFtRixFQUFBcEUsRUFBQSxFQVNqQixDQUFFL0IsT0FBUThPLEdBQVNpSCxHQUFVaFcsU0FBVSxJQUFHLEtBQUEsRUFBQSxLQUcvQ3VPLE9BQU9pRSxLQUFLSixHQUFnQjVQLE9BQVMsR0FBQyxDQUFBNEQsRUFBQS9GLEVBQUEsRUFBQSxLQUFBLENBQ2lELE9BQXpGMlYsRUFBUWMscUJBQXVCLDBEQUEwRDFRLEVBQUEvRixFQUFBLEVBQzFDYSxRQUFRQyxJQUNyRG9OLE9BQU9DLFFBQVE0RCxHQUFnQmpLLElBQUksU0FBQTRPLEdBQUEsSUFBQUMsRUFBQXJWLEVBQUFvVixFQUFBLEdBQXFCLE9BQU1OLEdBQWRPLEVBQUEsR0FBUUEsRUFBQSxHQUFnRCxJQUN6RyxLQUFBLEVBRnFDLE9BQXRDaEIsRUFBUWlCLCtCQUE4QjdRLEVBQUFuRixFQUFBbUYsRUFBQXBFLEVBQUEsRUFHL0IsQ0FBRS9CLE9BQVE4TyxHQUFTaUgsR0FBVWhXLFNBQVUsSUFBRyxLQUFBLEVBQUEsT0FBQW9HLEVBQUFwRSxFQUFBLEVBRzVDLENBQUUvQixPQUFRLDZCQUE4QkQsU0FBVSxJQUFHLEVBQUFpRyxFQUFBLEtBQzdEbkgsTUFBQUMsS0FBQUMsVUFBQSxDQUVELFNBQVMrVSxHQUFxQnRELEdBQzVCLE9BQU9BLEVBQU9JLE9BQU8sU0FBQ3FHLEVBQVFuRyxHQUM1QixJQUFNbUUsRUFBWWQsR0FBcUJyRCxHQUN2QyxPQUFPbUUsRUFBWWdDLEVBQVNoQyxFQUFZZ0MsQ0FDMUMsRUFBRyxHQUNMLENBQUMsU0FFY1QsR0FBcUIvSixFQUFBZ0IsR0FBQSxPQUFBeUosR0FBQXJZLE1BQUFDLEtBQUFDLFVBQUEsQ0FBQSxTQUFBbVksS0FtQm5DLE9BbkJtQ0EsR0FBQWxZLEVBQUFDLElBQUFDLEVBQXBDLFNBQUFvTyxFQUNFb0YsRUFDQW5ELEdBQWdDLElBQUE0SCxFQUFBaEUsRUFBQWlFLEVBQUFDLEVBQUEsT0FBQXBZLElBQUFnQixFQUFBLFNBQUFpTixHQUFBLGNBQUFBLEVBQUE5TSxHQUFBLEtBQUEsRUFFc0IsT0FBaEQrUyxFQUFRQyxHQUEyQjdELEVBQU91QixPQUFNNUQsRUFBQTlNLEVBQUEsRUFDbkN1VSxHQUFZeEIsR0FBTSxLQUFBLEVBQzRDLE9BRDNFaUUsRUFBR2xLLEVBQUFsTSxFQUNIcVcsRUFBWUMsR0FBcUJGLEVBQUtHLEdBQWtCaEksRUFBT3VCLE1BQU03RCxPQUFNQyxFQUFBbkwsRUFBQSxFQUMxRSxDQUNMcVMsZUFBZ0I3RSxFQUFPNkUsZUFDdkJ6QixTQUFVRCxFQUNWOEUsSUFBS0QsR0FBa0JoSSxFQUFPdUIsTUFBTTdELE1BQ3BDd0ssUUFBU0YsU0FBa0JGLFNBQUFBLEVBQVdLLEtBQ3RDQyxZQUFhQyxHQUEwQlAsR0FDdkNRLE9BQVExRSxFQUNSMkUsUUFBb0MsT0FBN0JYLEVBQUVJLEdBQXFCLE1BQUhILE9BQUcsRUFBSEEsRUFBS00sTUFBSVAsRUFBSUksR0FBa0JoSSxFQUFPdUIsTUFBTTJELE1BQ3ZFc0QsT0FBUVIsU0FBa0JILFNBQUFBLEVBQUtZLFlBQy9CQyxJQUFLVixTQUFrQkgsU0FBQUEsRUFBS2MsU0FDNUJDLFdBQVlaLEdBQXFCLE1BQUhILE9BQUcsRUFBSEEsRUFBS2UsY0FDcEMsRUFBQTdLLEVBQUEsS0FDRnpPLE1BQUFDLEtBQUFDLFVBQUEsQ0FBQSxTQUVjNFgsR0FBaUJqSixHQUFBLE9BQUEwSyxHQUFBdlosTUFBQUMsS0FBQUMsVUFBQSxDQUFBLFNBQUFxWixLQU0vQixPQU4rQkEsR0FBQXBaLEVBQUFDLElBQUFDLEVBQWhDLFNBQUEwTyxFQUFpQ2tELEdBQVksSUFBQXFDLEVBQUEsT0FBQWxVLElBQUFnQixFQUFBLFNBQUFzTixHQUFBLGNBQUFBLEVBQUFuTixHQUFBLEtBQUEsRUFDSSxHQUF6QytTLEVBQVFDLEdBQTJCdEMsR0FDL0IsQ0FBQXZELEVBQUFuTixFQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUFtTixFQUFBeEwsRUFBQSxFQUNELHdEQUFzRCxLQUFBLEVBQUEsT0FBQXdMLEVBQUFuTixFQUFBLEVBRWxEa00sR0FBaUIsQ0FBQyxNQUFPLE9BQVE2RyxFQUFPLGdCQUFpQixDQUFDLElBQUcsS0FBQSxFQUFBLE9BQUE1RixFQUFBeEwsRUFBQSxFQUFBd0wsRUFBQXZNLEdBQUEsRUFBQTRNLEVBQUEsS0FDM0UvTyxNQUFBQyxLQUFBQyxVQUFBLENBRUQsU0FBUzJYLEdBQTJCMkIsR0FHbEMsTUFBTyxDQUNMQyxXQUFZQyxHQUF3QkYsR0FFeEMsQ0FFQSxTQUFTRSxHQUF3QkYsR0FDL0IsSUFBTUcsRUFBaUJDLEdBQTBCQyxFQUF5QkwsSUFDMUUsSUFBS3RJLEdBQ0gsT0FBT3lJLEVBR1QsSUFBTWpKLEVBQVNKLEdBQWMsQ0FBQyxNQUFPLE9BQVFxSixHQUM3QyxPQUEyQixJQUFwQmpKLEVBQU94UCxVQUFrQndQLEVBQU92UCxPQUFPd0ksT0FBT2pHLE9BQVMsRUFDMURrVyxHQUEwQmxKLEVBQU92UCxRQUNqQ3dZLENBQ04sQ0FFQSxTQUFTQyxHQUEwQkosR0FDakMsT0FBT0EsRUFDSmxMLE1BQU0sTUFDTmpGLElBQUksU0FBQ3lRLEdBQUksT0FBS0EsRUFBS0MsUUFBUTlJLEdBQWdDLEdBQUcsR0FDOUQ5TixLQUFLLE1BQ0x3RyxNQUNMLENBRUEsU0FBUytPLEdBQWtCeFUsR0FDekIsTUFBd0IsaUJBQVZBLEdBQXNCQSxFQUFNUixPQUFTLEVBQUlRLE9BQVE4RixDQUNqRSxDQUVBLFNBQVN5TyxHQUNQRixFQUNBeUIsR0FDNEIsSUFBQUMsRUFBQUMsRUFDNUIsR0FBUSxNQUFIM0IsR0FBQUEsRUFBSzRCLE1BQTRCLElBQXBCNUIsRUFBSTRCLEtBQUt6VyxPQUkzQixPQUVzRCxPQUZ0RHVXLEVBQzhDLE9BRDlDQyxFQUNFM0IsRUFBSTRCLEtBQUtDLEtBQUssU0FBQ3pCLEdBQUcsT0FBS0EsRUFBSXZLLE9BQVM0TCxDQUFPLElBQUNFLEVBQzVDM0IsRUFBSTRCLEtBQUtDLEtBQUssU0FBQ3pCLEdBQUcsTUFBd0IsWUFBbkJBLEVBQUlXLFVBQXdCLElBQUNXLEVBQ3BEMUIsRUFBSTRCLEtBQUtDLEtBQUssU0FBQ3pCLEdBQUcsTUFBb0IsY0FBZkEsRUFBSTlILE1BQXNCLEVBRXJELENBRUEsU0FBU2tJLEdBQTBCSixHQUFxRCxJQUFBMEIsRUFBQUMsRUFBQUMsRUFDdEYsR0FBUSxNQUFINUIsR0FBQUEsRUFBSzZCLE9BQThCLElBQXJCN0IsRUFBSTZCLE1BQU05VyxPQUk3QixPQUMrRCxPQUQvRDJXLFNBQUFDLEVBQ0UzQixFQUFJNkIsTUFBTUosS0FBSyxTQUFDSyxHQUFJLE1BQXlCLFlBQXBCQSxFQUFLbkIsVUFBd0IsV0FBdERnQixFQUF5RGxNLE1BQUlpTSxFQUNSLE9BRFFFLEVBQzdENUIsRUFBSTZCLE1BQU1KLEtBQUssU0FBQ0ssR0FBSSxNQUFxQixjQUFoQkEsRUFBSzVKLE1BQXNCLFNBQUMsRUFBckQwSixFQUF1RG5NLElBRTNELENDcmNBLFNBQXNCc00sS0FBaUIsT0FBQUMsR0FBQTNhLE1BQUFDLEtBQUFDLFVBQUEsQ0FFdEMsU0FBQXlhLEtBQUEsT0FBQUEsR0FBQXhhLEVBQUFDLElBQUFDLEVBRk0sU0FBQUMsSUFBQSxJQUFBc2EsRUFBQXZULEVBQUEsT0FBQWpILElBQUFnQixFQUFBLFNBQUFDLEdBQUEsY0FBQUEsRUFBQUUsR0FBQSxLQUFBLEVBQUEsT0FBQUYsRUFBQUUsRUFBQSxFQUNTc1osS0FBOEIsS0FBQSxFQUFBLEdBQUEsT0FBQUQsRUFBQXZaLEVBQUFjLEdBQUEsQ0FBQWQsRUFBQUUsRUFBQSxFQUFBLEtBQUEsQ0FBQThGLEVBQUF1VCxFQUFBdlosRUFBQUUsRUFBQSxFQUFBLE1BQUEsS0FBQSxFQUFBLE9BQUFGLEVBQUFFLEVBQUEsRUFBWXVaLEtBQXNCLEtBQUEsRUFBQXpULEVBQUFoRyxFQUFBYyxFQUFBLEtBQUEsRUFBQSxPQUFBZCxFQUFBNkIsRUFBQSxFQUFBbUUsR0FBQSxFQUFBL0csRUFBQSxLQUMvRU4sTUFBQUMsS0FBQUMsVUFBQSxDQUVELFNBQXNCNGEsS0FBb0IsT0FBQUMsR0FBQS9hLE1BQUFDLEtBQUFDLFVBQUEsQ0FlekMsU0FBQTZhLEtBQUEsT0FBQUEsR0FBQTVhLEVBQUFDLElBQUFDLEVBZk0sU0FBQW1GLElBQUEsSUFBQTBFLEVBQUEsT0FBQTlKLElBQUFnQixFQUFBLFNBQUFpRixHQUFBLGNBQUFBLEVBQUE5RSxHQUFBLEtBQUEsRUFDaUIsT0FEakIySSxFQUNFOFEsR0FBZTNVLEVBQUE5RSxFQUFBLEVBRVozQixFQUF1QixDQUMzQixLQUNBLE9BQ0EsT0FDQSxTQUNBLG1CQUNBLGFBQ0EsK0JBQ0EsS0FBQSxFQUFBLE9BQUF5RyxFQUFBbkQsRUFBQSxFQUFBZ0gsRUFBQTdELEVBQUFsRSxFQUNGd0gsT0FDRixrREFBK0MsRUFBQW5FLEVBQUEsS0FFbER4RixNQUFBQyxLQUFBQyxVQUFBLENBQUEsU0FFYzJhLEtBQTRCLE9BQUFJLEdBQUFqYixNQUFBQyxLQUFBQyxVQUFBLENBQUEsU0FBQSthLEtBWTFDLE9BWjBDQSxHQUFBOWEsRUFBQUMsSUFBQUMsRUFBM0MsU0FBQW1ILElBQUEsSUFBQTBULEVBQUF6RCxFQUFBLE9BQUFyWCxJQUFBZ0IsRUFBQSxTQUFBcUcsR0FBQSxjQUFBQSxFQUFBbkcsRUFBQW1HLEVBQUFsRyxHQUFBLEtBQUEsRUFBQSxPQUFBa0csRUFBQW5HLEVBQUEsRUFBQW1HLEVBQUFsRyxFQUFBLEVBR1kzQixFQUF1QixDQUFDLEtBQU0sS0FBTSxPQUFRLFNBQVUsY0FBZSxhQUFjLHFCQUFvQixLQUFBLEVBQ3pHLE9BRkFzYixFQUFVelQsRUFBQXRGLEVBRWR3SCxPQUFJbEMsRUFBQXZFLEVBQUEsRUFDQ2dZLEVBQVd4WCxPQUFTLEVBQUl3WCxPQUFhbFIsR0FBUyxLQUFBLEVBQUEsR0FBQXZDLEVBQUFuRyxFQUFBLEdBRWpENlosR0FGaUQxRCxFQUFBaFEsRUFBQXRGLEdBRWYsQ0FBQXNGLEVBQUFsRyxFQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUFrRyxFQUFBdkUsRUFBQSxPQUM3QjhHLEdBQVMsS0FBQSxFQUFBLE1BQUF5TixFQUFBLEtBQUEsRUFBQSxPQUFBaFEsRUFBQXZFLEVBQUEsR0FBQSxFQUFBc0UsRUFBQSxLQUFBLENBQUEsQ0FBQSxFQUFBLElBQUEsS0FJckJ4SCxNQUFBQyxLQUFBQyxVQUFBLENBRU0sU0FBU2liLEdBQTRCelQsR0FDMUMsTUFBTyxzQ0FBc0NvSixLQUFLbkosT0FBT0QsR0FDM0QsQ0FFQSxTQUFTc1QsR0FBZ0I5VyxFQUFlWCxHQUN0QyxHQUFJVyxFQUFNUixPQUFTLEVBQ2pCLE9BQU9RLEVBRVQsTUFBTSxJQUFJbkIsTUFBTVEsRUFDbEIsQ0NzSE8sU0FBUzZYLEdBQXFCQyxHQUNuQyxPQUFPQyxHQUE2QkQsRUFBVyxRQUNqRCxDQUVPLFNBQVNFLEdBQWtCRixHQUNoQyxPQUFPQyxHQUE2QkQsRUFBVyxlQUNqRCxDQUVBLFNBQXNCRyxHQUFrQjNiLEdBQUEsT0FBQTRiLEdBQUF6YixNQUFBQyxLQUFBQyxVQUFBLENBS3ZDLFNBQUF1YixLQUFBLE9BQUFBLEdBQUF0YixFQUFBQyxJQUFBQyxFQUxNLFNBQUFDLEVBQWtDb2IsR0FBNEIsSUFBQUMsRUFBQUMsRUFBQXpOLEVBQUFDLEVBQUF5TixFQUFBLE9BQUF6YixJQUFBZ0IsRUFBQSxTQUFBQyxHQUFBLGNBQUFBLEVBQUFFLEdBQUEsS0FBQSxFQUFBLE9BQUFGLEVBQUFFLEVBQUEsRUFDdkN1TSxLQUFrQixLQUFBLEVBQTVCLE9BQTRCNk4sRUFBQXRhLEVBQUFjLEVBQUF5WixFQUFBL1ksRUFBQThZLEVBQUEsR0FBdkN4TixFQUFLeU4sRUFBQSxHQUFFeE4sRUFBSXdOLEVBQUEsR0FBQXZhLEVBQUFFLEVBQUEsRUFDRXVhLEdBQWMzTixFQUFPQyxFQUFNZ04sR0FBcUJNLElBQWEsS0FBQSxFQUM1QixPQUQvQ0csRUFBS3hhLEVBQUFjLEVBQ1hzSixxQkFBUXhJLE9BQW1CNFksRUFBTUUsc0JBQW9CMWEsRUFBQTZCLEVBQUEsRUFDOUMrTSxHQUFTLENBQUU0TCxNQUFBQSxLQUFRLEVBQUF2YixFQUFBLEtBQzNCTixNQUFBQyxLQUFBQyxVQUFBLENBRUQsU0FBc0I4YixHQUFlbGMsR0FBQSxPQUFBbWMsR0FBQWpjLE1BQUFDLEtBQUFDLFVBQUEsQ0FLcEMsU0FBQStiLEtBQUEsT0FBQUEsR0FBQTliLEVBQUFDLElBQUFDLEVBTE0sU0FBQW1GLEVBQStCNkwsR0FBMEIsSUFBQTZLLEVBQUFDLEVBQUEvVixFQUFBLE9BQUFoRyxJQUFBZ0IsRUFBQSxTQUFBaUYsR0FBQSxjQUFBQSxFQUFBOUUsR0FBQSxLQUFBLEVBQUEsUUFDeEJ5SSxJQUFicUgsRUFBc0IsQ0FBQWhMLEVBQUE5RSxFQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUE4RSxFQUFBOUUsRUFBQSxFQUFTZ04sS0FBaUIsS0FBQSxFQUFBbkksRUFBQUMsRUFBQWxFLEVBQUFrRSxFQUFBOUUsRUFBQSxFQUFBLE1BQUEsS0FBQSxFQUFBNkUsRUFBR21WLEdBQWtCbEssR0FBUyxLQUFBLEVBQWpGLE9BQWhCNkssRUFBZ0I5VixFQUFBQyxFQUFBOUUsRUFBQSxFQUNJNmEsR0FBK0JGLEdBQWlCLEtBQUEsRUFDUixPQUQ1REMsRUFBVzlWLEVBQUFsRSxFQUNqQnNKLDRCQUFReEksT0FBMEJrWixFQUFZSixzQkFBb0IxVixFQUFBbkQsRUFBQSxFQUMzRCtNLEdBQVMsQ0FBRW9NLGFBQWNGLEtBQWMsRUFBQTNXLEVBQUEsS0FDL0N4RixNQUFBQyxLQUFBQyxVQUFBLENBRUQsU0FBc0JvYyxLQUFpQyxPQUFBQyxHQUFBdmMsTUFBQUMsS0FBQUMsVUFBQSxDQVN0RCxTQUFBcWMsS0FBQSxPQUFBQSxHQUFBcGMsRUFBQUMsSUFBQUMsRUFUTSxTQUFBbUgsSUFBQSxJQUFBZ1YsRUFBQW5MLEVBQUE4SyxFQUFBLE9BQUEvYixJQUFBZ0IsRUFBQSxTQUFBcUcsR0FBQSxjQUFBQSxFQUFBbEcsR0FBQSxLQUFBLEVBQUEsT0FBQWtHLEVBQUFsRyxFQUFBLEVBQ3dCa00sR0FBaUIsQ0FBQyxLQUFNLE9BQVEsU0FBVSxTQUFVLE9BQVEsV0FBWSxDQUFDLElBQUcsS0FBQSxFQUNuRSxHQURoQytPLEVBQWMvVSxFQUFBdEYsRUFDZGtQLEVBQVdtTCxFQUFlN1MsUUFDNUJ3UixHQUE0QnFCLElBQW9CLFFBQVExTCxLQUFLTyxHQUFTLENBQUE1SixFQUFBbEcsRUFBQSxFQUFBLEtBQUEsQ0FBQSxPQUFBa0csRUFBQXZFLEVBQUEsT0FDakU4RyxHQUFTLEtBQUEsRUFBQSxPQUFBdkMsRUFBQWxHLEVBQUEsRUFHUTZhLEdBQStCL0ssR0FBUyxLQUFBLEVBQWpELE9BQVg4SyxFQUFXMVUsRUFBQXRGLEVBQUFzRixFQUFBdkUsRUFBQSxFQUNWK00sR0FBUyxDQUFFb00sYUFBY0YsS0FBYyxFQUFBM1UsRUFBQSxLQUMvQ3hILE1BQUFDLEtBQUFDLFVBQUEsQ0FBQSxTQUVja2MsR0FBOEIvVyxHQUFBLE9BQUFvWCxHQUFBemMsTUFBQUMsS0FBQUMsVUFBQSxDQUFBLFNBQUF1YyxLQUc1QyxPQUg0Q0EsR0FBQXRjLEVBQUFDLElBQUFDLEVBQTdDLFNBQUErSCxFQUE4Q2lKLEdBQXlCLElBQUFxTCxFQUFBQyxFQUFBeE8sRUFBQUMsRUFBQSxPQUFBaE8sSUFBQWdCLEVBQUEsU0FBQWlILEdBQUEsY0FBQUEsRUFBQTlHLEdBQUEsS0FBQSxFQUFBLE9BQUE4RyxFQUFBOUcsRUFBQSxFQUN6Q3VNLEtBQWtCLEtBQUEsRUFBNUIsT0FBNEI0TyxFQUFBclUsRUFBQWxHLEVBQUF3YSxFQUFBOVosRUFBQTZaLEVBQUEsR0FBdkN2TyxFQUFLd08sRUFBQSxHQUFFdk8sRUFBSXVPLEVBQUEsR0FBQXRVLEVBQUE5RyxFQUFBLEVBQ0xxYixHQUFXek8sRUFBT0MsRUFBTWlELEdBQVMsS0FBQSxFQUFBLE9BQUFoSixFQUFBbkYsRUFBQSxFQUFBbUYsRUFBQWxHLEdBQUEsRUFBQWlHLEVBQUEsS0FDL0NwSSxNQUFBQyxLQUFBQyxVQUFBLENBRUQsU0FBU29iLEdBQTZCRCxFQUE0QndCLEdBQ2hFLElBQU1DLEVBQWdCblYsT0FBTzBULEdBQVcxUixPQUt4QyxHQUo2QixJQUF6Qm1ULEVBQWNwWixRQUNoQmlJLGFBQWExSSxPQUFXNFosRUFBSywwQkFBMEIsR0FHckQsUUFBUS9MLEtBQUtnTSxHQUNmLE9BQU9BLEVBR1QsSUFBTUMsRUFBd0IsVUFBVkYsRUFBb0IsU0FBVyxPQUM3Q2hILEVBQVFpSCxFQUFjakgsTUFDMUIsSUFBSWhOLE9BQU0saURBQUE1RixPQUFrRDhaLEVBQVcsb0JBRXpFLEdBQVMsTUFBTGxILEdBQUFBLEVBQVEsR0FDVixPQUFPQSxFQUFNLEdBR2ZsSyxHQUFhLDRCQUFBMUksT0FBNkI0WixFQUFLLDhCQUFBNVosT0FBNkI2WixFQUFhLEtBQUssRUFDaEcsQ0FBQyxTQUVjaEIsR0FBYXhXLEVBQUEyQixFQUFBeUcsR0FBQSxPQUFBc1AsR0FBQWhkLE1BQUFDLEtBQUFDLFVBQUEsQ0FBQSxTQUFBOGMsS0FtQjNCLE9BbkIyQkEsR0FBQTdjLEVBQUFDLElBQUFDLEVBQTVCLFNBQUFtSSxFQUE2QjJGLEVBQWVDLEVBQWNzTixHQUE0QixJQUFBRyxFQUFBb0IsRUFBQSxPQUFBN2MsSUFBQWdCLEVBQUEsU0FBQXFILEdBQUEsY0FBQUEsRUFBQWxILEdBQUEsS0FBQSxFQUFBLE9BQUFrSCxFQUFBbEgsRUFBQSxFQUNoRTJiLEdBQXFDLENBQ3ZEbE8sTUF0SWEsdVBBdUliYixNQUFBQSxFQUNBQyxLQUFBQSxFQUNBMk4sT0FBUUwsRUFDUnlCLEtBQU0sUUFDTkMsZUFBZ0IsU0FBQzlOLEdBQVEsSUFBQStOLEVBQUEsT0FBa0IsT0FBbEJBLEVBQUsvTixFQUFTWSxPQUFnQixPQUFabU4sRUFBYkEsRUFBZUMsaUJBQVUsRUFBekJELEVBQTJCeEIsS0FBSyxJQUM5RCxLQUFBLEVBUFMsT0FBTEEsRUFBS3BULEVBQUF0RyxFQUFBc0csRUFBQWxILEVBQUEsRUFRWWdjLEdBQWlFLENBQ3RGdk8sTUFwS3NCLDBjQXFLdEJiLE1BQUFBLEVBQ0FDLEtBQUFBLEVBQ0EyTixPQUFRTCxFQUNSOEIsaUJBQWtCLFNBQUNsTyxHQUFRLElBQUFtTyxFQUFBLE9BQWtCLE9BQWxCQSxFQUFLbk8sRUFBU1ksT0FBZ0IsT0FBWnVOLEVBQWJBLEVBQWVILGFBQWlCLE9BQVBHLEVBQXpCQSxFQUEyQjVCLFlBQUssRUFBaEM0QixFQUFrQ0MsUUFBUSxFQUMxRUMsUUFBU0MsS0FDVCxLQUFBLEVBUFksT0FBUlgsRUFBUXhVLEVBQUF0RyxFQUFBc0csRUFBQXZGLEVBQUEsRUFBQTBVLEVBQUFBLEtBU0ZpRSxHQUFLLEdBQUEsQ0FBRW9CLFNBQUFBLEtBQVEsRUFBQXpVLEVBQUEsS0FDNUJ4SSxNQUFBQyxLQUFBQyxVQUFBLENBQUEsU0FFYzBjLEdBQVVqUCxFQUFBQyxFQUFBZ0IsR0FBQSxPQUFBaVAsR0FBQTdkLE1BQUFDLEtBQUFDLFVBQUEsQ0FBQSxTQUFBMmQsS0FrQnhCLE9BbEJ3QkEsR0FBQTFkLEVBQUFDLElBQUFDLEVBQXpCLFNBQUE4RyxFQUEwQmdILEVBQWVDLEVBQWNpRCxHQUF5QixJQUFBOEssRUFBQXJiLEVBQUFDLEVBQUErYyxFQUFBQyxFQUFBLE9BQUEzZCxJQUFBZ0IsRUFBQSxTQUFBa0csR0FBQSxjQUFBQSxFQUFBL0YsR0FBQSxLQUFBLEVBQUEsT0FBQStGLEVBQUEvRixFQUFBLEVBQ3BEMmIsR0FBMkMsQ0FDbkVsTyxNQXZIVSw2UEF3SFZiLE1BQUFBLEVBQ0FDLEtBQUFBLEVBQ0EyTixPQUFRMUssRUFDUjhMLEtBQU0sZUFDTkMsZUFBZ0IsU0FBQzlOLEdBQVEsSUFBQTBPLEVBQUEsT0FBa0IsT0FBbEJBLEVBQUsxTyxFQUFTWSxPQUFnQixPQUFaOE4sRUFBYkEsRUFBZVYsaUJBQVUsRUFBekJVLEVBQTJCN0IsV0FBVyxJQUNwRSxLQUFBLEVBUGUsT0FBWEEsRUFBVzdVLEVBQUFuRixFQUFBbUYsRUFBQS9GLEVBQUEsRUFRc0JhLFFBQVFDLElBQUksQ0FDakQ0YixHQUFnQjlQLEVBQU9DLEVBQU1pRCxHQUM3QjZNLEdBQVUvUCxFQUFPQyxFQUFNaUQsS0FDdkIsS0FBQSxFQUgyQixPQUczQnZRLEVBQUF3RyxFQUFBbkYsRUFBQXBCLEVBQUE4QixFQUFBL0IsRUFBQSxHQUhLZ2QsRUFBYS9jLEVBQUEsR0FBRWdkLEVBQU9oZCxFQUFBLEdBQUF1RyxFQUFBcEUsRUFBQSxFQUFBMFUsRUFBQUEsS0FNeEJ1RSxHQUFXLEdBQUEsQ0FDZGMsU0FBVSxHQUFBaGEsT0FBQXVLLEVBQUlzUSxHQUFhdFEsRUFBS3VRLElBQVNJLEtBQUtDLE9BQTJCLEVBQUFqWCxFQUFBLEtBRTVFbkgsTUFBQUMsS0FBQUMsVUFBQSxDQUVELFNBQVNrZSxHQUEyQkMsRUFBZUMsR0FDakQsSUFBTUMsRUFBMEMsaUJBQW5CRixFQUFLRyxVQUF5QkgsRUFBS0csVUFBWSxHQUN0RUMsRUFBNEMsaUJBQXBCSCxFQUFNRSxVQUF5QkYsRUFBTUUsVUFBWSxHQUMvRSxPQUFPRCxFQUFjRyxjQUFjRCxFQUNyQyxDQUFDLFNBRWNSLEdBQWVwUCxFQUFBOFAsRUFBQUMsR0FBQSxPQUFBQyxHQUFBN2UsTUFBQUMsS0FBQUMsVUFBQSxDQUFBLFNBQUEyZSxLQVM3QixPQVQ2QkEsR0FBQTFlLEVBQUFDLElBQUFDLEVBQTlCLFNBQUFvTyxFQUErQk4sRUFBZUMsRUFBY2lELEdBQXlCLE9BQUFqUixJQUFBZ0IsRUFBQSxTQUFBaU4sR0FBQSxjQUFBQSxFQUFBOU0sR0FBQSxLQUFBLEVBQUEsT0FBQThNLEVBQUE5TSxFQUFBLEVBQ3RFZ2MsR0FBdUUsQ0FDbEZ2TyxNQXZLbUIsZ2RBd0tuQmIsTUFBQUEsRUFDQUMsS0FBQUEsRUFDQTJOLE9BQVExSyxFQUNSbU0saUJBQWtCLFNBQUNsTyxHQUFRLElBQUF3UCxFQUFBLE9BQWtCLE9BQWxCQSxFQUFLeFAsRUFBU1ksT0FBZ0IsT0FBWjRPLEVBQWJBLEVBQWV4QixhQUF1QixPQUFid0IsRUFBekJBLEVBQTJCM0Msa0JBQVcsRUFBdEMyQyxFQUF3Q3BCLFFBQVEsRUFDaEZDLFFBQVNDLEtBQ1QsS0FBQSxFQUFBLE9BQUF2UCxFQUFBbkwsRUFBQSxFQUFBbUwsRUFBQWxNLEdBQUEsRUFBQXNNLEVBQUEsS0FDSHpPLE1BQUFDLEtBQUFDLFVBQUEsQ0FBQSxTQUVjZ2UsR0FBU2EsRUFBQUMsRUFBQUMsR0FBQSxPQUFBQyxHQUFBbGYsTUFBQUMsS0FBQUMsVUFBQSxDQUFBLFNBQUFnZixLQVN2QixPQVR1QkEsR0FBQS9lLEVBQUFDLElBQUFDLEVBQXhCLFNBQUEwTyxFQUF5QlosRUFBZUMsRUFBY2lELEdBQXlCLE9BQUFqUixJQUFBZ0IsRUFBQSxTQUFBc04sR0FBQSxjQUFBQSxFQUFBbk4sR0FBQSxLQUFBLEVBQUEsT0FBQW1OLEVBQUFuTixFQUFBLEVBQ2hFZ2MsR0FBNEQsQ0FDdkV2TyxNQTlJa0Isb2VBK0lsQmIsTUFBQUEsRUFDQUMsS0FBQUEsRUFDQTJOLE9BQVExSyxFQUNSbU0saUJBQWtCLFNBQUNsTyxHQUFRLElBQUE2UCxFQUFBLE9BQWtCLE9BQWxCQSxFQUFLN1AsRUFBU1ksT0FBZ0IsT0FBWmlQLEVBQWJBLEVBQWU3QixhQUF1QixPQUFiNkIsRUFBekJBLEVBQTJCaEQsa0JBQVcsRUFBdENnRCxFQUF3Q3BCLE9BQU8sRUFDL0VKLFFBQVN5QixLQUNULEtBQUEsRUFBQSxPQUFBMVEsRUFBQXhMLEVBQUEsRUFBQXdMLEVBQUF2TSxHQUFBLEVBQUE0TSxFQUFBLEtBQ0gvTyxNQUFBQyxLQUFBQyxVQUFBLENBQUEsU0FFY3FkLEdBQWdCOEIsR0FBQSxPQUFBQyxHQUFBdGYsTUFBQUMsS0FBQUMsVUFBQSxDQUFBLFNBQUFvZixLQWdDOUIsT0FoQzhCQSxHQUFBbmYsRUFBQUMsSUFBQUMsRUFBL0IsU0FBQWtmLEVBQXFFQyxHQU9wRSxJQUFBQyxFQUFBeEMsRUFBQXlDLEVBQUFDLEVBQUF0WSxFQUFBLE9BQUFqSCxJQUFBZ0IsRUFBQSxTQUFBb08sR0FBQSxjQUFBQSxFQUFBak8sR0FBQSxLQUFBLEVBRU8wYixFQUFzQixHQUFFLEtBQUEsRUFHSCxPQUhHNVYsRUFHVG1ZLEVBQU1oUSxFQUFBak8sRUFBQSxFQUNqQm9OLEdBQW1CNlEsRUFBT3hRLE1BQU8sQ0FDckNiLE1BQU9xUixFQUFPclIsTUFDZEMsS0FBTW9SLEVBQU9wUixLQUNiMk4sT0FBUTZELE9BQU9KLEVBQU96RCxRQUN0QjBELE9BQUFBLElBQ0EsS0FBQSxFQU5zQyxHQUFwQ0UsRUFBVXRZLEVBQVVtVyxpQkFBZ0IzVCxLQUFBeEMsRUFBQW1JLEVBQUFyTixHQVMzQixDQUFBcU4sRUFBQWpPLEVBQUEsRUFBQSxLQUFBLENBQUEsT0FBQWlPLEVBQUF0TSxFQUFBLEVBQ04rWixHQUFRLEtBQUEsRUFHNkQsR0FBOUVBLEVBQVN0VyxLQUFJM0csTUFBYmlkLEVBQVF6UCxFQUFTbVMsRUFBV0UsTUFBTXhXLElBQUltVyxFQUFPN0IsU0FBUzVULE9BQU8rVixNQUV4REgsRUFBV0ksU0FBU0MsWUFBVyxDQUFBeFEsRUFBQWpPLEVBQUEsRUFBQSxLQUFBLENBQUEsT0FBQWlPLEVBQUF0TSxFQUFBLEVBQzNCK1osR0FBUSxLQUFBLEVBRWpCd0MsRUFBc0MsT0FBaENDLEVBQUdDLEVBQVdJLFNBQVNFLFdBQVNQLE9BQUkxVixFQUFVLEtBQUEsRUFBQXdGLEVBQUFqTyxFQUFBLEVBQUEsTUFBQSxLQUFBLEVBQUEsT0FBQWlPLEVBQUF0TSxFQUFBLEdBQUEsRUFBQXFjLEVBQUEsS0FFdkR2ZixNQUFBQyxLQUFBQyxVQUFBLENBQUEsU0FFY2dkLEdBQWFnRCxHQUFBLE9BQUFDLEdBQUFuZ0IsTUFBQUMsS0FBQUMsVUFBQSxDQUFBLFNBQUFpZ0IsS0EyQjNCLE9BM0IyQkEsR0FBQWhnQixFQUFBQyxJQUFBQyxFQUE1QixTQUFBK2YsRUFBMkRaLEdBTzFELElBQUFhLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUF0VyxFQUFBLE9BQUE5SixJQUFBZ0IsRUFBQSxTQUFBcWYsR0FBQSxjQUFBQSxFQUFBbGYsR0FBQSxLQUFBLEVBQ3dCLE9BRHhCMkksRUFDa0JzVixFQUFNaUIsRUFBQWxmLEVBQUEsRUFDZm9OLEdBQW1CNlEsRUFBT3hRLE1BQU8sQ0FDckNiLE1BQU9xUixFQUFPclIsTUFDZEMsS0FBTW9SLEVBQU9wUixLQUNiMk4sT0FBUTZELE9BQU9KLEVBQU96RCxVQUN0QixLQUFBLEVBS0gsT0FWS3lFLEVBQVF0VyxFQUFVa1QsZUFBY3ZULEtBQUFLLEVBQUF1VyxFQUFBdGUsS0FTcEN3SixHQUFhLGtCQUFBMUksT0FBbUJ1YyxFQUFPckMsS0FBSSxNQUFBbGEsT0FBS3VjLEVBQU96RCxlQUFNOVksT0FBT3VjLEVBQU9yUixNQUFLLEtBQUFsTCxPQUFJdWMsRUFBT3BSLEtBQUksTUFDaEdxUyxFQUFBdmQsRUFBQSxFQUVNLENBQ0w2WSxPQUFReUUsRUFBU3pFLE9BQ2pCMkUsTUFBT0YsRUFBU0UsTUFDaEI3SCxJQUFLMkgsRUFBUzNILElBQ2Q4SCxPQUE4QixPQUF4Qk4sRUFBaUIsT0FBakJDLEVBQUVFLEVBQVNHLGFBQU0sRUFBZkwsRUFBaUJNLE9BQUtQLE9BQUlyVyxFQUNsQzZXLEtBQW1CLE9BQWZOLEVBQUVDLEVBQVNLLE1BQUlOLEVBQUksS0FDeEIsRUFBQUgsRUFBQSxLQUNGcGdCLE1BQUFDLEtBQUFDLFVBQUEsQ0FFRCxTQUFTMGQsR0FBZWtELEdBQTJDLElBQUFDLEVBQUFDLEVBQ2pFLE1BQU8sQ0FDTEMsS0FBTSxVQUNOTixPQUE2QixPQUF2QkksRUFBZ0IsT0FBaEJDLEVBQUVGLEVBQVFILGFBQU0sRUFBZEssRUFBZ0JKLE9BQUtHLE9BQUkvVyxFQUNqQ3dVLFVBQVdzQyxFQUFRdEMsVUFDbkIzRixJQUFLaUksRUFBUWpJLElBQ2JnSSxLQUFNQyxFQUFRRCxLQUVsQixDQUVBLFNBQVN6QixHQUFjOEIsR0FBK0IsSUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFDcEQsTUFBTyxDQUNMTixLQUFNLFNBQ05OLE9BQTRCLE9BQXRCUSxFQUFlLE9BQWZDLEVBQUVGLEVBQU9QLGFBQU0sRUFBYlMsRUFBZVIsT0FBS08sT0FBSW5YLEVBQ2hDd1gsTUFBbUIsT0FBZEgsRUFBRUgsRUFBT00sT0FBS0gsT0FBSXJYLEVBQ3ZCd1UsVUFBNkIsT0FBcEI4QyxFQUFFSixFQUFPTyxhQUFXSCxPQUFJdFgsRUFDakM2TyxJQUFLcUksRUFBT3JJLElBQ1pnSSxLQUFpQixPQUFiVSxFQUFFTCxFQUFPTCxNQUFJVSxFQUFJLEdBRXpCLENBRUEsU0FBU3pCLEdBQWV2YyxHQUN0QixNQUErQixpQkFBakJBLEVBQVFzZCxNQUFxQnRkLEVBQVFzZCxLQUFLbmQsT0FBUyxDQUNuRSxDQzlXQSxTQUFzQmdlLEdBQU03aEIsR0FBQSxPQUFBOGhCLEdBQUEzaEIsTUFBQUMsS0FBQUMsVUFBQSxDQTRCM0IsU0FBQXloQixLQUFBLE9BQUFBLEdBQUF4aEIsRUFBQUMsSUFBQUMsRUE1Qk0sU0FBQUMsRUFBQXNoQixHQUFBLElBQUE1TixFQUFBNk0sRUFBQUgsRUFBQW1CLEVBQUFDLEVBQUFDLEVBQUEzYixFQUFBaUIsRUFBQSxPQUFBakgsSUFBQWdCLEVBQUEsU0FBQUMsR0FBQSxjQUFBQSxFQUFBRSxHQUFBLEtBQUEsRUFBbUMsT0FBWHNmLEdBQXhCN00sV0FBQTROLEVBQXVELENBQUEsRUFBRUEsR0FBakNmLEtBQU1ILEVBQUsxTSxFQUFMME0sTUFBS3JmLEVBQUFFLEVBQUEsRUFDcEI2SyxHQUFXLENBQUMsTUFBTyxTQUFVLG1CQUFrQixLQUFBLEVBQU0sT0FBbkV5VixFQUFJeGdCLEVBQUFjLEVBQTJEd0gsT0FBSXRJLEVBQUFFLEVBQUEsRUFDckQ4TCxHQUFHLENBQUMsT0FBUSxPQUFRLFNBQVUsbUJBQW9CLE9BQVEsMkJBQTBCLEtBQUEsRUFvQm5FLE9BcEIvQnlVLEVBQUl6Z0IsRUFBQWMsRUFBZ0d3SCxPQUVyR2tZLEdBQ0hsVyxHQUFjLDZDQUVYbVcsR0FDSG5XLEdBQWMsNkNBRVprVyxJQUFTQyxHQUNYblcsR0FBYSxnREFBQTFJLE9BQWlENmUsUUFHMURDLEVBQWEsQ0FBQyxLQUFNLFNBQVUsU0FBVUQsRUFBTSxTQUFVRCxFQUFNLFVBQ2hFbkIsR0FDRnFCLEVBQVdwYixLQUFLLFVBQVcrWixHQUV6QkcsR0FDRmtCLEVBQVdwYixLQUFLLGNBQWUsS0FHakM4RSxHQUFTLDRCQUE0QnBLLEVBQUFFLEVBQUEsRUFDL0I4TCxHQUFHMFUsRUFBWWxCLEdBQUssS0FBQSxFQUdwQixPQUhvQnphLEVBRW5CNkosR0FBUTVJLEVBQ2JzSSxLQUFJdE8sRUFBQUUsRUFBQSxFQUFhOEwsR0FBRyxDQUFDLEtBQU0sT0FBUSxTQUFVLHFFQUFvRSxLQUFBLEVBQUEsT0FBQWhNLEVBQUE2QixFQUFBLEVBQUFrRCxFQUFBaUIsRUFBNUd1SSxNQUFLL0YsS0FBQXhDLEVBQUFoRyxFQUFBYyxLQUFBLEVBQUE3QixFQUFBLEtBRWJOLE1BQUFDLEtBQUFDLFVBQUEsQ0FFRCxTQUFzQjhoQixHQUFRbGlCLEdBQUEsT0FBQW1pQixHQUFBamlCLE1BQUFDLEtBQUFDLFVBQUEsQ0FLN0IsU0FBQStoQixLQUFBLE9BQUFBLEdBQUE5aEIsRUFBQUMsSUFBQUMsRUFMTSxTQUFBbUYsRUFBQTBPLEdBQUEsSUFBQTJNLEVBQUFILEVBQUFyUCxFQUFBLE9BQUFqUixJQUFBZ0IsRUFBQSxTQUFBaUYsR0FBQSxjQUFBQSxFQUFBOUUsR0FBQSxLQUFBLEVBQXFDLE9BQVhzZixFQUFJM00sRUFBSjJNLEtBQU1ILEVBQUt4TSxFQUFMd00sTUFBS3JhLEVBQUE5RSxFQUFBLEVBQ25CZ04sS0FBaUIsS0FBQSxFQUVVLE9BRjVDOEMsRUFBUWhMLEVBQUFsRSxFQUVkc0osR0FBUSwwQkFBQXhJLE9BQTJCb08sVUFBZWhMLEVBQUE5RSxFQUFBLEVBQ3JDMmdCLEdBQU83USxFQUFVLENBQUMsVUFBV3FQLEVBQU8sY0FBZSxLQUFNRyxHQUFLLEtBQUEsRUFBQSxPQUFBeGEsRUFBQW5ELEVBQUEsRUFBQW1ELEVBQUFsRSxHQUFBLEVBQUFxRCxFQUFBLEtBQzVFeEYsTUFBQUMsS0FBQUMsVUFBQSxDQUFBLFNBRWNnaUIsR0FBTTdjLEVBQUFDLEVBQUEyQixHQUFBLE9BQUFrYixHQUFBbmlCLE1BQUFDLEtBQUFDLFVBQUEsQ0FBQSxTQUFBaWlCLEtBY3BCLE9BZG9CQSxHQUFBaGlCLEVBQUFDLElBQUFDLEVBQXJCLFNBQUFtSCxFQUFzQjZKLEVBQWtCK1EsRUFBb0J2VixHQUFrQixJQUFBM0MsRUFBQXVOLEVBQUEsT0FBQXJYLElBQUFnQixFQUFBLFNBQUFxRyxHQUFBLGNBQUFBLEVBQUFsRyxHQUFBLEtBQUEsRUFBQSxPQUFBa0csRUFBQWxHLEVBQUEsRUFDdEU4TCxHQUFFLENBQUUsS0FBTSxPQUFRZ0UsR0FBUXBPLE9BQUF1SyxFQUFLNFUsSUFBV3ZWLEdBQVUsS0FBQSxFQUdwRCxPQUhvRDNDLEVBRW5EK0YsR0FBUXdILEVBQ2I5SCxLQUFJbEksRUFBQWxHLEVBQUEsRUFDSThMLEdBQUcsQ0FDUCxLQUNBLE9BQ0FnRSxFQUNBLFNBQ0EsMEVBQ0EsS0FBQSxFQUFBLE9BQUE1SixFQUFBdkUsRUFBQSxFQUFBZ0gsRUFBQXVOLEVBUEM3SCxNQUFLL0YsS0FBQTROLEVBQUFoUSxFQUFBdEYsS0FBQSxFQUFBcUYsRUFBQSxLQVVieEgsTUFBQUMsS0FBQUMsVUFBQSxDQ3VERCxTQUFzQm1pQixLQUFvQixPQUFBQyxHQUFBdGlCLE1BQUFDLEtBQUFDLFVBQUEsQ0FVekMsU0FBQW9pQixLQUFBLE9BQUFBLEdBQUFuaUIsRUFBQUMsSUFBQUMsRUFWTSxTQUFBQyxJQUFBLElBQUE2TCxFQUFBK0ssRUFBQXFMLEVBQUFyVCxFQUFBQyxFQUFBQyxFQUFBb1QsRUFBQTNCLEVBQUEsT0FBQXpnQixJQUFBZ0IsRUFBQSxTQUFBQyxHQUFBLGNBQUFBLEVBQUFFLEdBQUEsS0FBQSxFQUFBLE9BQUFGLEVBQUFFLEVBQUEsRUFDZXlLLEdBQXNCLDBDQUF5QyxLQUFBLEVBR25GLElBSE1HLEVBQUs5SyxFQUFBYyxFQUNMK1UsRUFBVXVMLEdBQWdCdFcsR0FDMUJvVyxFQUE0QyxDQUFBLEVBQ2xEclQsSUFBQUMsRUFBK0JNLE9BQU9DLFFBQVF3SCxFQUFRd0wsU0FBUXhULEVBQUFDLEVBQUF6TCxPQUFBd0wsSUFBRUUsRUFBQXZNLEVBQUFzTSxFQUFBRCxHQUFBLEdBQXBEc1QsRUFBUXBULEVBQUEsR0FDRSxpQkFEQXlSLEVBQUl6UixFQUFBLEtBQ1F5UixFQUFLbmQsT0FBUyxJQUM1QzZlLEVBQWtCQyxHQUFZM0IsR0FFakMsT0FBQXhmLEVBQUE2QixFQUFBLEVBQ01xZixHQUFpQixFQUFBamlCLEVBQUEsS0FDekJOLE1BQUFDLEtBQUFDLFVBQUEsQ0FFRCxTQUFzQnlpQixHQUFxQjlpQixFQUFBQyxFQUFBdUYsRUFBQUMsRUFBQTJCLEdBQUEsT0FBQTJiLEdBQUE1aUIsTUFBQUMsS0FBQUMsVUFBQSxDQWdEMUMsU0FBQTBpQixLQUFBLE9BQUFBLEdBQUF6aUIsRUFBQUMsSUFBQUMsRUFoRE0sU0FBQW1GLEVBQ0x3SixFQUNBYixFQUNBQyxFQUNBaUQsRUFDQXdSLEdBQTRELElBQUFwRCxFQUFBcUQsRUFBQUMsRUFBQUMsRUFBQWhkLEVBQUFDLEVBQUFnZCxFQUFBN2MsRUFBQWlCLEVBQUE2QyxFQUFBdU4sRUFBQUMsRUFBQSxPQUFBdFgsSUFBQWdCLEVBQUEsU0FBQWlGLEdBQUEsY0FBQUEsRUFBQS9FLEVBQUErRSxFQUFBOUUsR0FBQSxLQUFBLEVBQUEsT0FBQThFLEVBQUE5RSxFQUFBLEVBTWxEb04sR0FjSEssRUFBTyxDQUNSYixNQUFBQSxFQUNBQyxLQUFBQSxFQUNBMk4sT0FBUTZELE9BQU92TyxHQUNmb08sT0FBQUEsSUFDQSxLQUFBLEVBQ0UsR0FERnZWLEVBQUE0WSxFQUFBemMsRUFBQWxFLEVBQ0YrTixLQUFJN0ksRUFBQSxNQUFBNkMsRUFBQSxDQUFBN0QsRUFBQTlFLEVBQUEsRUFBQSxLQUFBLENBQUE4RixFQUFZLE9BQVp5YixFQXJCZ0JBLEVBcUJkeEYsWUFBVSxLQUFBLEVBQUEsR0FBQWxYLEVBQUFpQixFQUFBLENBQUFoQixFQUFBOUUsRUFBQSxFQUFBLEtBQUEsQ0FBQTZFLEVBQWEsT0FBYjBjLEVBckJJQSxFQXFCRjNHLGFBQVcsS0FBQSxFQUFBLElBQUEvVixFQUFBLENBQUFDLEVBQUE5RSxFQUFBLEVBQUEsS0FBQSxDQUFBa1csT0FBQSxFQUFBcFIsRUFBQTlFLEVBQUEsRUFBQSxNQUFBLEtBQUEsRUFBQWtXLEVBckJUcUwsRUFxQldFLGNBQWEsS0FBQSxHQXJCeENBLEVBQWF2TCxJQXdCakI5TCxHQUNFLCtHQUVIM0YsRUFBQWpDLEVBRW9CaWYsRUFBY25ELE9BQUt4WixFQUFBL0UsRUFBQSxFQUFBMEUsRUFBQTFCLElBQUEsS0FBQSxFQUFBLElBQUEyQixFQUFBRCxFQUFBekUsS0FBQWdELEtBQUEsQ0FBQThCLEVBQUE5RSxFQUFBLEVBQUEsS0FBQSxDQUF2QixPQUFOMGhCLEVBQU1oZCxFQUFBL0IsTUFBQW1DLEVBQUE5RSxFQUFBLEVBQ1RzaEIsRUFBU0ksR0FBTyxLQUFBLEVBQUE1YyxFQUFBOUUsRUFBQSxFQUFBLE1BQUEsS0FBQSxFQUFBOEUsRUFBQTlFLEVBQUEsR0FBQSxNQUFBLEtBQUEsR0FBQThFLEVBQUEvRSxFQUFBLEdBQUFvVyxFQUFBclIsRUFBQWxFLEVBQUE2RCxFQUFBdEIsRUFBQWdULEdBQUEsS0FBQSxHQUFBLE9BQUFyUixFQUFBL0UsRUFBQSxHQUFBMEUsRUFBQTFDLElBQUErQyxFQUFBL0MsRUFBQSxJQUFBLEtBQUEsR0FBQSxHQUduQjBmLEVBQWNqRCxTQUFTQyxZQUFXLENBQUEzWixFQUFBOUUsRUFBQSxHQUFBLEtBQUEsQ0FBQSxPQUFBOEUsRUFBQW5ELEVBQUEsR0FBQSxLQUFBLEdBR3ZDdWMsRUFBeUMsT0FBbkNzRCxFQUFHQyxFQUFjakQsU0FBU0UsV0FBUzhDLE9BQUkvWSxFQUFVLEtBQUEsR0FBQTNELEVBQUE5RSxFQUFBLEVBQUEsTUFBQSxLQUFBLEdBQUEsT0FBQThFLEVBQUFuRCxFQUFBLEdBQUEsRUFBQXNDLEVBQUEsS0FBQSxDQUFBLENBQUEsRUFBQSxHQUFBLEdBQUEsS0FBQSxLQUUxRHhGLE1BQUFDLEtBQUFDLFVBQUEsQ0FFRCxTQUFzQmdqQixHQUF5QnhWLEVBQUFDLEVBQUFDLEdBQUEsT0FBQXVWLEdBQUFuakIsTUFBQUMsS0FBQUMsVUFBQSxDQVk5QyxTQUFBaWpCLEtBQUEsT0FBQUEsR0FBQWhqQixFQUFBQyxJQUFBQyxFQVpNLFNBQUFtSCxFQUNMMkcsRUFDQUMsRUFDQWlELEdBQXlCLElBQUErUixFQUFBLE9BQUFoakIsSUFBQWdCLEVBQUEsU0FBQXFHLEdBQUEsY0FBQUEsRUFBQWxHLEdBQUEsS0FBQSxFQUVELE9BQWxCNmhCLEVBQWdCLEdBQUUzYixFQUFBbEcsRUFBQSxFQUNsQm9oQixHQXZGcUIscVpBdUYwQnhVLEVBQU9DLEVBQU1pRCxFQUFVLFNBQUM0UixHQUN0RUEsRUFBT0ksWUFDVkQsRUFBSXpjLEtBQUtzYyxFQUFPSyxHQUVwQixHQUFFLEtBQUEsRUFBQSxPQUFBN2IsRUFBQXZFLEVBQUEsRUFDS2tnQixHQUFHLEVBQUE1YixFQUFBLEtBQ1h4SCxNQUFBQyxLQUFBQyxVQUFBLENBRUQsU0FBc0JxakIsR0FBdUIzVSxFQUFBQyxFQUFBOFAsR0FBQSxPQUFBNkUsR0FBQXhqQixNQUFBQyxLQUFBQyxVQUFBLENBd0Q1QyxTQUFBc2pCLEtBQUEsT0FBQUEsR0FBQXJqQixFQUFBQyxJQUFBQyxFQXhETSxTQUFBbUksRUFDTDJGLEVBQ0FDLEVBQ0FpRCxHQUF5QixJQUFBb1MsRUFBQSxPQUFBcmpCLElBQUFnQixFQUFBLFNBQUFxSCxHQUFBLGNBQUFBLEVBQUFsSCxHQUFBLEtBQUEsRUFFb0IsT0FBdkNraUIsRUFBcUMsR0FBRWhiLEVBQUFsSCxFQUFBLEVBRXZDb2hCLEdBcEtpQixxM0JBb0swQnhVLEVBQU9DLEVBQU1pRCxFQUFRbFIsRUFBQUMsSUFBQUMsRUFBRSxTQUFBK0gsRUFBTzZhLEdBQU0sSUFBQVMsRUFBQWhHLEVBQUFxQyxFQUFBTixFQUFBa0UsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQSxPQUFBNWpCLElBQUFnQixFQUFBLFNBQUFpSCxHQUFBLGNBQUFBLEVBQUE5RyxHQUFBLEtBQUEsRUFBQSxJQUMvRTBoQixFQUFPSSxXQUFVLENBQUFoYixFQUFBOUcsRUFBQSxFQUFBLEtBQUEsQ0FBQSxPQUFBOEcsRUFBQW5GLEVBQUEsR0FBQSxLQUFBLEVBSWZ3YSxFQUFXdUYsRUFBT3ZGLFNBQVNtQyxNQUFNeFcsSUFBSTRhLElBQ3ZDbEUsRUFBV2tELEVBQU92RixTQUFTcUMsU0FDM0JOLEVBQTJCLE9BQXJCaUUsRUFBRzNELEVBQVNFLFdBQVN5RCxPQUFJMVosRUFBUyxLQUFBLEVBQUEsSUFFckMrVixFQUFTQyxZQUFXLENBQUEzWCxFQUFBOUcsRUFBQSxFQUFBLEtBQUEsQ0FBQSxPQUFBOEcsRUFBQTlHLEVBQUEsRUFFakJvTixHQXhJWSxxYkFvSk8sQ0FBRTZULFNBQVVTLEVBQU9LLEdBQUk3RCxPQUFBQSxJQUFTLEtBQUEsRUFDckQsR0FEcURzRSxFQUFBSixFQUFBdGIsRUFBQWxHLEVBQ3pEK04sS0FBSTRULEVBQUEsTUFBQUMsRUFBQSxDQUFBMWIsRUFBQTlHLEVBQUEsRUFBQSxLQUFBLENBQUF1aUIsRUFBTSxPQUFOSCxFQWRvQkEsRUFjbEJPLE1BQUksS0FBQSxFQUFBLElBQUFKLEVBQUEsQ0FBQXpiLEVBQUE5RyxFQUFBLEVBQUEsS0FBQSxDQUFBeWlCLE9BQUEsRUFBQTNiLEVBQUE5RyxFQUFBLEVBQUEsTUFBQSxLQUFBLEVBQUF5aUIsRUFkY0wsRUFjWmpHLFNBQVEsS0FBQSxHQWRoQm1HLEVBQWlCRyxJQWlCckJyWSw2REFBYTFJLE9BQTJEZ2dCLEVBQU9LLFNBR2pGNUYsRUFBUy9XLEtBQUkzRyxNQUFiMGQsRUFBUWxRLEVBQVNxVyxFQUFrQmhFLE1BQU14VyxJQUFJNGEsTUFDN0NsRSxFQUFXOEQsRUFBa0I5RCxTQUM3Qk4sRUFBMkIsT0FBckJtRSxFQUFHN0QsRUFBU0UsV0FBUzJELE9BQUk1WixFQUFVM0IsRUFBQTlHLEVBQUEsRUFBQSxNQUFBLEtBQUEsRUFHM0NraUIsRUFBUTljLEtBQUssQ0FDWDJjLEdBQUlMLEVBQU9LLEdBQ1hELFdBQVlKLEVBQU9JLFdBQ25CYyxXQUFZbEIsRUFBT2tCLFdBQ25CQyxLQUFNbkIsRUFBT21CLEtBQ2J0SyxLQUFNbUosRUFBT25KLEtBQ2J1SyxhQUFjcEIsRUFBT29CLGFBQ3JCQyxVQUFXckIsRUFBT3FCLFVBQ2xCQyxrQkFBbUJ0QixFQUFPc0Isa0JBQzFCN0csU0FBQUEsSUFDQyxLQUFBLEVBQUEsT0FBQXJWLEVBQUFuRixFQUFBLEdBQUEsRUFBQWtGLEVBQUEsS0FDSCxLQUFBLEVBQUEsT0FBQUssRUFBQXZGLEVBQUEsRUFFS3VnQixHQUFPLEVBQUFqYixFQUFBLEtBQ2Z4SSxNQUFBQyxLQUFBQyxVQUFBLENBRUQsU0FBc0Jza0IsS0FBbUIsT0FBQUMsR0FBQXprQixNQUFBQyxLQUFBQyxVQUFBLENBTXhDLFNBQUF1a0IsS0FBQSxPQUFBQSxHQUFBdGtCLEVBQUFDLElBQUFDLEVBTk0sU0FBQThHLElBQUEsSUFBQXdVLEVBQUFDLEVBQUF6TixFQUFBQyxFQUFBaUQsRUFBQXFULEVBQUFDLEVBQUEsT0FBQXZrQixJQUFBZ0IsRUFBQSxTQUFBa0csR0FBQSxjQUFBQSxFQUFBL0YsR0FBQSxLQUFBLEVBQUEsT0FBQStGLEVBQUEvRixFQUFBLEVBQ3VCdU0sS0FBa0IsS0FBQSxFQUE1QixPQUE0QjZOLEVBQUFyVSxFQUFBbkYsRUFBQXlaLEVBQUEvWSxFQUFBOFksRUFBQSxHQUF2Q3hOLEVBQUt5TixFQUFBLEdBQUV4TixFQUFJd04sRUFBQSxHQUFBdFUsRUFBQS9GLEVBQUEsRUFDS2dOLEtBQWlCLEtBQUEsRUFHekIsT0FIVDhDLEVBQVEvSixFQUFBbkYsRUFFZHNKLEdBQVMseUNBQXlDaVosRUFDM0N6VSxHQUFRM0ksRUFBQS9GLEVBQUEsRUFBNkJnaUIsR0FBd0JwVixFQUFPQyxFQUFNaUQsR0FBUyxLQUFBLEVBQUEsT0FBQXNULEVBQUFyZCxFQUFBbkYsRUFBQW1GLEVBQUFwRSxFQUFBLEVBQUF3aEIsRUFBQSxDQUF4RUUsbUJBQWtCRCxLQUFBLEVBQUF4ZCxFQUFBLEtBQ3JDbkgsTUFBQUMsS0FBQUMsVUFBQSxDQUVELFNBQXNCMmtCLEdBQXNCakcsR0FBQSxPQUFBa0csR0FBQTlrQixNQUFBQyxLQUFBQyxVQUFBLENBc0QzQyxTQUFBNGtCLEtBQUEsT0FBQUEsR0FBQTNrQixFQUFBQyxJQUFBQyxFQXRETSxTQUFBb08sRUFBc0NpVSxHQUErQixJQUFBaEcsRUFBQUMsRUFBQXhPLEVBQUFDLEVBQUFpRCxFQUFBMFQsRUFBQUMsRUFBQXRWLEVBQUE1TCxFQUFBRCxFQUFBd1osRUFBQTRILEVBQUFDLEVBQUFDLEVBQUEzQyxFQUFBM0IsRUFBQXZSLEVBQUE4VixFQUFBQyxFQUFBQyxFQUFBLE9BQUFsbEIsSUFBQWdCLEVBQUEsU0FBQWlOLEdBQUEsY0FBQUEsRUFBQS9NLEVBQUErTSxFQUFBOU0sR0FBQSxLQUFBLEVBQUEsT0FBQThNLEVBQUE5TSxFQUFBLEVBQzlDdU0sS0FBa0IsS0FBQSxFQUE1QixPQUE0QjRPLEVBQUFyTyxFQUFBbE0sRUFBQXdhLEVBQUE5WixFQUFBNlosRUFBQSxHQUF2Q3ZPLEVBQUt3TyxFQUFBLEdBQUV2TyxFQUFJdU8sRUFBQSxHQUFBdE8sRUFBQTlNLEVBQUEsRUFDS2dOLEtBQWlCLEtBQUEsRUFDWCxPQUR2QjhDLEVBQVFoRCxFQUFBbE0sRUFBQWlqQixFQUNZMWxCLElBQUcyTyxFQUFBOU0sRUFBQSxFQUFPMmhCLEdBQTBCL1UsRUFBT0MsRUFBTWlELEdBQVMsS0FBQSxFQUFBZ1UsRUFBQWhYLEVBQUFsTSxFQUE5RTRpQixFQUFhLElBQUFLLEVBQUFDLEdBRW5CNVosR0FBUSxlQUFBeEksT0FBZ0J3TSxPQUFPaUUsS0FBS2dQLEdBQVNoZixPQUFNLHVCQUU3Q3NoQixFQUE4QixHQUM5QnRWLEVBQVVELE9BQU9DLFFBQVFnVCxHQUFRNWUsRUFBQUMsRUFFQzJMLEVBQVFBLFdBQVNyQixFQUFBL00sRUFBQSxFQUFBd0MsRUFBQVEsSUFBQSxLQUFBLEVBQUEsSUFBQVQsRUFBQUMsRUFBQXZDLEtBQUFnRCxLQUFBLENBQUE4SixFQUFBOU0sRUFBQSxFQUFBLEtBQUEsQ0FDWSxHQURaMGpCLEVBQUFwaUIsRUFBQWdCLEVBQUFLLE1BQUEsR0FBN0NnaEIsRUFBS0QsRUFBQSxHQUFBRSxFQUFBdGlCLEVBQUFvaUIsRUFBQSxHQUFBLEdBQUd6QyxFQUFRMkMsRUFBQSxHQUFFdEUsRUFBSXNFLEVBQUEsR0FDaEMxWixpQkFBUXhJLE9BQWVpaUIsRUFBUSxFQUFDLEtBQUFqaUIsT0FBSXlNLEVBQVFoTSxPQUFNLE1BQUFULE9BQUt1ZixJQUNsRHVDLEVBQWNRLElBQUkvQyxHQUFTLENBQUFuVSxFQUFBOU0sRUFBQSxFQUFBLEtBQUEsQ0FBQSxPQUFBOE0sRUFBQW5MLEVBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxPQUFBbUwsRUFBQTlNLEVBQUEsRUFJVG9OLEdBQU8sd2FBMEI1QixDQUFFNlQsU0FBQUEsRUFBVTNCLEtBQUFBLElBQ2IsS0FBQSxFQTNCS3ZSLEVBQVFqQixFQUFBbE0sRUE2QkcsT0FBakJrYixFQUFJL04sRUFBU1ksT0FBeUIsT0FBckJtTixFQUFiQSxFQUFlbUksc0JBQTJCLE9BQVJuSSxFQUFsQ0EsRUFBb0M0RixTQUFwQzVGLEVBQTRDZ0csV0FDOUMyQixFQUFrQnJlLEtBQUs2YixHQUV2Qi9XLEdBQVEscUNBQUF4SSxPQUFzQ3VmLFFBQy9DLEtBQUEsRUFBQW5VLEVBQUE5TSxFQUFBLEVBQUEsTUFBQSxLQUFBLEVBQUE4TSxFQUFBOU0sRUFBQSxHQUFBLE1BQUEsS0FBQSxHQUFBOE0sRUFBQS9NLEVBQUEsR0FBQWdrQixFQUFBalgsRUFBQWxNLEVBQUEyQixFQUFBWSxFQUFBNGdCLEdBQUEsS0FBQSxHQUFBLE9BQUFqWCxFQUFBL00sRUFBQSxHQUFBd0MsRUFBQVIsSUFBQStLLEVBQUEvSyxFQUFBLElBQUEsS0FBQSxHQUdlLE9BQWxCbUksR0FBUyxTQUFTNEMsRUFBQW5MLEVBQUEsRUFDWCtNLEdBQVMsQ0FBRXdWLG9CQUFxQlQsS0FBb0IsRUFBQXZXLEVBQUEsS0FBQSxDQUFBLENBQUEsRUFBQSxHQUFBLEdBQUEsS0FBQSxLQUM1RHpPLE1BQUFDLEtBQUFDLFVBQUEsQ0FFRCxTQUFTK2pCLEdBQXVCbkQsR0FBNEUsSUFBQUMsRUFBQUMsRUFDMUcsT0FBQXBKLEVBQUFBLEVBQUEsQ0FBQSxFQUNLa0osR0FBTyxDQUFBLEVBQUEsQ0FDVkgsT0FBa0MsaUJBQW5CRyxFQUFRSCxPQUFzQkcsRUFBUUgsT0FBK0IsT0FBekJJLEVBQWtCLE9BQWxCQyxFQUFJRixFQUFRSCxhQUFNLEVBQWRLLEVBQWdCSixPQUFLRyxFQUFJLE1BRTVGLENBRUEsU0FBUzBCLEdBQWdCdFcsR0FHdkIsSUFDRSxJQUFNdVosRUFBUy9WLEtBQUtDLE1BQU16RCxHQUkxQixPQVNKLFNBQXNCakksR0FDcEIsR0FBcUIsV0FBakJ5aEIsRUFBT3poQixJQUFnQyxPQUFWQSxHQUFrQjJMLE1BQU1DLFFBQVE1TCxHQUMvRCxPQUFPLEVBR1QsSUFBTXdlLEVBQVd4ZSxFQUFnQ3dlLFFBQ2pELEdBQXVCLFdBQW5CaUQsRUFBT2pELElBQW9DLE9BQVpBLEdBQW9CN1MsTUFBTUMsUUFBUTRTLEdBQ25FLE9BQU8sRUFHVCxPQUFPalQsT0FBT3FGLE9BQU80TixHQUFTa0QsTUFBTSxTQUFDQyxHQUFLLE9BQUtBLFNBQTBELGlCQUFWQSxDQUFrQixFQUNuSCxDQXZCU0MsQ0FBYUosSUFDaEIvWixNQUFhMUksT0FMRyx1Q0FLWSwyREFBNkQsR0FFcEZ5aUIsQ0FDVCxDQUFFLE1BQU9oZSxHQUlQLE1BSElBLGFBQWlCb0ssYUFDbkJuRyxHQUFhLDBDQUFBMUksT0FBMkN5RSxFQUFNbkUsU0FBVyxHQUVyRW1FLENBQ1IsQ0FDRixDQ2hWQSxTQUFzQnFlLEdBQWVsbUIsR0FBQSxPQUFBbW1CLEdBQUFobUIsTUFBQUMsS0FBQUMsVUFBQSxDQThDcEMsU0FBQThsQixLQUFBLE9BQUFBLEdBQUE3bEIsRUFBQUMsSUFBQUMsRUE5Q00sU0FBQUMsRUFBK0JvYixHQUFtQixJQUFBdUssRUFBQSxPQUFBN2xCLElBQUFnQixFQUFBLFNBQUFDLEdBQUEsY0FBQUEsRUFBQUUsR0FBQSxLQUFBLEVBQUEsT0FBQUYsRUFBQUUsRUFBQSxFQUMvQmlhLEdBQW1CRSxHQUFZLEtBQUEsRUFBeEMsT0FBVHVLLEVBQVM1a0IsRUFBQWMsRUFBQWQsRUFBQTZCLEVBQUEsRUFFUiwwTEFBQUQsT0FFcUJ5WSxFQUFXLDREQUFBelksT0FFdkNnakIsRUFBVXRjLE9BQU0sdTBDQUFBMUcsT0FnQnlCeVksRUFBVywwcEJBc0JwRC9SLFFBQU0sRUFBQXJKLEVBQUEsS0FDUE4sTUFBQUMsS0FBQUMsVUFBQSxDQ2hETSxTQUFTZ21CLEdBQXNCaEwsR0FDcEMsTUFBQSxrQkFBQWpZLE9BQXlCa2pCLEdBQVUsVUFBQWxqQixPQUFXaVksNENBQWFqWSxPQUF1Q2tqQixHQUFXakwsR0FBVyxRQUMxSCxDQUVBLFNBQVNpTCxHQUFXamlCLEdBQ2xCLE1BQUEsSUFBQWpCLE9BQVdpQixFQUFNa2lCLFdBQVcsSUFBSyxXQUFVLElBQzdDLENDREEsU0FBc0JDLEtBQWlCLE9BQUFDLEdBQUF0bUIsTUFBQUMsS0FBQUMsVUFBQSxDQXlCdEMsU0FBQW9tQixLQUFBLE9BQUFBLEdBQUFubUIsRUFBQUMsSUFBQUMsRUF6Qk0sU0FBQUMsSUFBQSxJQUFBNGEsRUFBQXFMLEVBQUFDLEVBQUEsT0FBQXBtQixJQUFBZ0IsRUFBQSxTQUFBQyxHQUFBLGNBQUFBLEVBQUFFLEdBQUEsS0FBQSxFQUFBLE9BQUFGLEVBQUFFLEVBQUEsRUFDb0JtWixLQUFtQixLQUFBLEVBQ2MsT0FEcERRLEVBQVU3WixFQUFBYyxFQUNWb2tCLEVBQW1CTCxHQUFzQmhMLEdBQVc3WixFQUFBRSxFQUFBLEVBQ2xDK2EsS0FBbUMsS0FBQSxFQUE1QyxPQUFUa0ssRUFBU25sQixFQUFBYyxFQUFBZCxFQUFBNkIsRUFBQSxFQUNSLHdCQUFBRCxPQUNZdWpCLEVBQVksZUFBaUIsU0FBUSw2QkFBQXZqQixPQUE0QmlZLEVBQVUsc0JBQUFqWSxPQUFzQnNqQixFQUFnQixtcERBQUF0akIsT0FnQjVFeUYsRUFBa0IsU0FBQXpGLE9BRTFFd2pCLEdBQTJCRCxHQUFVLE1BQ3JDN2MsUUFBTSxFQUFBckosRUFBQSxLQUNQTixNQUFBQyxLQUFBQyxVQUFBLENBRUQsU0FBU3VtQixHQUEyQkQsR0FDbEMsT0FBT0EsRUFDSCw0Q0FBQXZqQixPQUVKdWpCLEVBQVU3YyxPQUFNLFlBRWhCQSxPQUNJLEVBQ04sQ0N4Q08sU0FBUytjLEdBQXNCQyxFQUFvQkMsRUFBa0JDLEdBQzFFLElBQU1DLEVBQXVCRCxFQUFzQlQsV0FBVyxLQUFNLEtBQUtBLFdBQVcsSUFBSyxLQUN6RixNQUFPLHlEQUFBbmpCLE9BQytDNmpCLEVBQW9CLHlCQUFBN2pCLE9BQXdCMGpCLEVBQVUsU0FBQTFqQixPQUFRMmpCLEVBQVEsa0VBQUEzakIsT0FHaEcwakIsRUFBVSxpRkFBQTFqQixPQUNvQzJqQixFQUFRLGtXQUFBM2pCLE9BRzVCNmpCLEVBQW9CLHVMQUUxRW5kLE1BQ0YsQ0NWQSxTQUFzQm9kLEtBQW1CLE9BQUFDLEdBQUFobkIsTUFBQUMsS0FBQUMsVUFBQSxDQWV4QyxTQUFBOG1CLEtBQUEsT0FBQUEsR0FBQTdtQixFQUFBQyxJQUFBQyxFQWZNLFNBQUFDLElBQUEsSUFBQTRhLEVBQUFxTCxFQUFBLE9BQUFubUIsSUFBQWdCLEVBQUEsU0FBQUMsR0FBQSxjQUFBQSxFQUFBRSxHQUFBLEtBQUEsRUFBQSxPQUFBRixFQUFBRSxFQUFBLEVBQ29CbVosS0FBbUIsS0FBQSxFQUNjLE9BRHBEUSxFQUFVN1osRUFBQWMsRUFDVm9rQixFQUFtQkwsR0FBc0JoTCxHQUFXN1osRUFBQTZCLEVBQUEsRUFDbkQsNEVBQUFELE9BQ2lFc2pCLEVBQWdCLHMvQkFVeEY1YyxRQUFNLEVBQUFySixFQUFBLEtBQ1BOLE1BQUFDLEtBQUFDLFVBQUEsQ0NmRCxTQUFzQittQixLQUFtQixPQUFBQyxHQUFBbG5CLE1BQUFDLEtBQUFDLFVBQUEsQ0FzQnhDLFNBQUFnbkIsS0FBQSxPQUFBQSxHQUFBL21CLEVBQUFDLElBQUFDLEVBdEJNLFNBQUFDLElBQUEsT0FBQUYsSUFBQWdCLEVBQUEsU0FBQUMsR0FBQSxjQUFBQSxFQUFBRSxHQUFBLEtBQUEsRUFBQSxPQUFBRixFQUFBRSxFQUFBLEVBQ0MzQixFQUNKLENBQ0UsT0FDQSxnQkFDQSxNQUNBdW5CLEVBQWMsSUFBSUMsSUFBSSxvQkFBcUJ2TyxNQUMzQyxXQUNBLFFBQ0EsVUFDQSxJQUNBLFVBQ0EsY0FDQSxVQUNBLFFBQ0EsVUFDQSxjQUVGLENBQ0U5VyxZQUFhLHlDQUVoQixLQUFBLEVBQUEsT0FBQVYsRUFBQTZCLEVBQUEsR0FBQSxFQUFBNUMsRUFBQSxLQUNGTixNQUFBQyxLQUFBQyxVQUFBLENDR0QsSUFBTW1uQixHQUFVLElBQUlDLEVBMkxwQixTQUFTQyxHQUFtRC9ILEdBUzFELElBQU1qZixFQUFVOG1CLEdBQVE5bUIsUUFBUWlmLEVBQU9wUixNQUFNb1osWUFBWWhJLEVBQU9nSSxhQUFhQyxzQkFBcUIsR0FDOUZqSSxFQUFPa0ksY0FDVG5uQixFQUFRb25CLFNBQVNuSSxFQUFPa0ksYUFBY2xJLEVBQU9vSSxxQkFHL0NybkIsRUFDR3NuQixVQUFVLElBQUlDLEVBQU8sa0JBQW1CdEksRUFBT3VJLG1CQUFtQkMsUUFBUXhJLEVBQU93SSxTQUFTQyx1QkFDMUZDLE9BQU0vbkIsRUFBQUMsSUFBQUMsRUFBQyxTQUFBK2YsSUFBQSxJQUFBK0gsRUFBQTVhLEVBQUE2YSxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBWixFQUFBbm5CLEVBQUE2RyxFQUFBbWhCLEVBQUF0b0IsVUFBQSxPQUFBRSxJQUFBZ0IsRUFBQSxTQUFBcWYsR0FBQSxjQUFBQSxFQUFBbGYsR0FBQSxLQUFBLEVBQUEsSUFBQTRtQixFQUFBSyxFQUFBOWtCLE9BQVU2SixFQUFJLElBQUFzQyxNQUFBc1ksR0FBQUMsRUFBQSxFQUFBQSxFQUFBRCxFQUFBQyxJQUFKN2EsRUFBSTZhLEdBQUFJLEVBQUFKLEdBSU4sT0FIZ0NDLEVBQUF4bEIsRUFBSjBLLEVBQUksR0FBdkMrYSxFQUFpQkQsRUFBQSxHQUFFRSxFQUFZRixFQUFBLEdBQ2hDVixFQUF3QyxpQkFBdEJXLEVBQWlDQSxFQUFvQixHQUN2RTluQixFQUF3QyxpQkFBdEI4bkIsRUFBaUNDLEVBQWVELEVBQWlCamhCLEVBQ3pGbEQsUUFBUW5ELE9BQU15ZixFQUFBbGYsRUFBQSxFQUFhaWUsRUFBT2pILElBQUkvWCxFQUFROEksTUFBT3FlLEdBQVMsS0FBQSxFQUFBdGdCLEVBQS9DN0UsTUFBS3FILEtBQUF4QyxFQUFBb1osRUFBQXRlLEdBQUEsS0FBQSxFQUFBLE9BQUFzZSxFQUFBdmQsRUFBQSxHQUFBLEVBQUFrZCxFQUFBLElBRTFCLENBRUEsU0FBU3FJLEdBQ1ByYSxFQUNBb1osRUFDQWtCLEdBUUEsSUFBTW5vQixFQUFVOG1CLEdBQVE5bUIsUUFBUTZOLEdBQU1vWixZQUFZQSxHQUFhQyxzQkFBcUIsR0FFekQsbUJBQWhCaUIsRUFPWG5vQixFQUFRb25CLFNBQVNlLEVBQVloQixhQUFjZ0IsRUFBWWQscUJBQXFCTSxPQUFNL25CLEVBQUFDLElBQUFDLEVBQUMsU0FBQXNvQixFQUFPaEIsR0FBZ0IsSUFBQWxRLEVBQUEsT0FBQXJYLElBQUFnQixFQUFBLFNBQUF3bkIsR0FBQSxjQUFBQSxFQUFBcm5CLEdBQUEsS0FBQSxFQUMxRixPQUQwRmtXLEVBQ3hHdFQsUUFBUW5ELE9BQU00bkIsRUFBQXJuQixFQUFBLEVBQWFtbkIsRUFBWW5RLElBQUlvUCxHQUFTLEtBQUEsRUFBQWxRLEVBQXJDalYsTUFBS3FILEtBQUE0TixFQUFBbVIsRUFBQXptQixHQUFBLEtBQUEsRUFBQSxPQUFBeW1CLEVBQUExbEIsRUFBQSxHQUFBLEVBQUF5bEIsRUFBQSxLQVBwQnBvQixFQUFRMm5CLE9BQU0vbkIsRUFBQUMsSUFBQUMsRUFBQyxTQUFBd29CLElBQUEsSUFBQTNlLEVBQUEsT0FBQTlKLElBQUFnQixFQUFBLFNBQUEwbkIsR0FBQSxjQUFBQSxFQUFBdm5CLEdBQUEsS0FBQSxFQUNDLE9BREQySSxFQUNiL0YsUUFBUW5ELE9BQU04bkIsRUFBQXZuQixFQUFBLEVBQWFtbkIsSUFBYSxLQUFBLEVBQUF4ZSxFQUF6QjFILE1BQUtxSCxLQUFBSyxFQUFBNGUsRUFBQTNtQixHQUFBLEtBQUEsRUFBQSxPQUFBMm1CLEVBQUE1bEIsRUFBQSxHQUFBLEVBQUEybEIsRUFBQSxJQVExQixDQXhPQXhCLEdBQVFqWixLQUFLLGdCQUFnQm9aLFlBQVksa0RBQWtEdUIscUJBRTNGMUIsR0FDRzltQixRQUFRLGtCQUNSaW5CLFlBQVksK0VBQ1pDLHNCQUFxQixHQUNyQlMsT0FBTS9uQixFQUFBQyxJQUFBQyxFQUFDLFNBQUFDLElBQUEsT0FBQUYsSUFBQWdCLEVBQUEsU0FBQUMsR0FBQSxjQUFBQSxFQUFBRSxHQUFBLEtBQUEsRUFBQSxPQUFBRixFQUFBRSxFQUFBLEVBQ0EwbEIsS0FBcUIsS0FBQSxFQUMzQjlpQixRQUFRbkQsT0FBT3dCLE1BQU0sVUFBVSxLQUFBLEVBQUEsT0FBQW5CLEVBQUE2QixFQUFBLEdBQUEsRUFBQTVDLEVBQUEsS0FHbkNpbkIsR0FBNkIsQ0FDM0JuWixLQUFNLFNBQ05vWixZQUFhLGdFQUNiTyxrQkFBbUIscUJBQ25CQyxRQUFTLENBQUMsTUFBTyxRQUFTLFNBQVUsVUFDcEN6UCxJQUFLLFNBQUN5USxHQUFJLE1BQ0MsUUFBVEEsRUFDSWxnQixFQUFvQnVkLEtBQXFCLENBQ3ZDbGQsZUFBZ0IsZ0JBQ2hCUyxVQUFXLFNBQUNOLEVBQU9uSSxHQUNqQixJZGtDTCxTQUFtQ0EsR0FDeEMsT0FBT3lILEVBQW1Da0ksS0FBSzNQLEVBQ2pELENjcENnQjhuQixDQUEwQjluQixHQUc5QixNQUFBLE1BQUE4QixPQUFhNkcsRUFBaUJSLEdBQU0sUUFBQXJHLE9BQU85QixFQUM3QyxJQUVGdUksRUFBZ0JzZixFQUFNM0MsS0FBb0IsSUFHbERvQyxHQUFnQixlQUFnQiw4Q0FBK0MsV0FBQSxPQUM3RS9lLEVBQWdCLFFBQVMyYyxLQUFvQixHQUUvQ29DLEdBQWdCLGdCQUFpQixvREFBcUQsV0FBQSxPQUNwRi9lLEVBQWdCLFNBQVUyYyxLQUFvQixHQUVoRG9DLEdBQWdCLGdCQUFpQixtREFBb0QsV0FBQSxPQUNuRi9lLEVBQWdCLFNBQVUyYyxLQUFvQixHQUdoRGtCLEdBQTZCLENBQzNCblosS0FBTSxPQUNOb1osWUFBYSxtRUFDYk8sa0JBQW1CLHVCQUNuQkMsUUFBUyxDQUFDLE1BQU8sUUFBUyxTQUFVLFVBQ3BDTixhQUFjLFVBQ2RFLG9CQUFxQiw2QkFDckJyUCxJQUFLLFNBQUN5USxFQUFNRSxHQUFjLE1BQ2YsUUFBVEYsRUFDSWxnQixFQUFvQmlkLEdBQWdCM0ssR0FBcUI4TixJQUFrQixDQUN6RS9mLGVBQWdCLG9CQUVsQk8sRUFBZ0JzZixFQUFNakQsR0FBZ0IzSyxHQUFxQjhOLElBQWlCLElBR3BGVCxHQUFnQixhQUFjLGlEQUFrRCxDQUM5RWYsYUFBYyxVQUNkRSxvQkFBcUIsNkJBQ3JCclAsSUFBSyxTQUFDMlEsR0FBYyxPQUFLeGYsRUFBZ0IsUUFBU3FjLEdBQWdCM0ssR0FBcUI4TixJQUFpQixJQUUxR1QsR0FBZ0IsY0FBZSx1REFBd0QsQ0FDckZmLGFBQWMsVUFDZEUsb0JBQXFCLDZCQUNyQnJQLElBQUssU0FBQzJRLEdBQWMsT0FBS3hmLEVBQWdCLFNBQVVxYyxHQUFnQjNLLEdBQXFCOE4sSUFBaUIsSUFFM0dULEdBQWdCLGNBQWUsc0RBQXVELENBQ3BGZixhQUFjLFVBQ2RFLG9CQUFxQiw2QkFDckJyUCxJQUFLLFNBQUMyUSxHQUFjLE9BQUt4ZixFQUFnQixTQUFVcWMsR0FBZ0IzSyxHQUFxQjhOLElBQWlCLElBRzNHN0IsR0FDRzltQixRQUFRLGNBQ1JpbkIsWUFBWSxnRUFDWkcsU0FBUyxnQkFBaUIseUNBQzFCQSxTQUFTLGNBQWUsa0RBQ3hCQSxTQUFTLGdCQUFpQix3REFDMUJFLFVBQ0MsSUFBSUMsRUFBTyxrQkFBbUIsMEJBQTBCRSxRQUFRLENBQUMsUUFBUyxTQUFVLFdBQVdDLHVCQUVoR1Isc0JBQXFCLEdBQ3JCUyxPQUFNL25CLEVBQUFDLElBQUFDLEVBQ0wsU0FBQW1GLEVBQ0VtaEIsRUFDQUMsRUFDQVksRUFDQWhuQixHQUFpRCxJQUFBNEYsRUFBQSxPQUFBaEcsSUFBQWdCLEVBQUEsU0FBQWlGLEdBQUEsY0FBQUEsRUFBQTlFLEdBQUEsS0FBQSxFQUVuQyxPQUZtQzZFLEVBRWpEakMsUUFBUW5ELE9BQU1xRixFQUFBOUUsRUFBQSxFQUNObUksRUFBZ0JsSixFQUFROEksTUFBT29kLEdBQXNCQyxFQUFZQyxFQUFVWSxJQUFhLEtBQUEsRUFBQXBoQixFQURqRjVELE1BQUtxSCxLQUFBekQsRUFBQUMsRUFBQWxFLEdBQUEsS0FBQSxFQUFBLE9BQUFrRSxFQUFBbkQsRUFBQSxHQUFBLEVBQUFzQyxFQUFBLEtBTTFCK2hCLEdBQTZCLENBQzNCblosS0FBTSxXQUNOb1osWUFBYSwyRUFDYk8sa0JBQW1CLHVCQUNuQkMsUUFBUyxDQUFDLFFBQVMsU0FBVSxVQUM3QnpQLElBQUssU0FBQ2pQLEdBQUssT0FBS0ksRUFBZ0JKLEVBQU95ZCxLQUFzQixJQUcvRDBCLEdBQWdCLGlCQUFrQix5REFBMEQsV0FBQSxPQUMxRi9lLEVBQWdCLFFBQVNxZCxLQUFzQixHQUVqRDBCLEdBQWdCLGtCQUFtQiwrREFBZ0UsV0FBQSxPQUNqRy9lLEVBQWdCLFNBQVVxZCxLQUFzQixHQUVsRDBCLEdBQWdCLGtCQUFtQiw4REFBK0QsV0FBQSxPQUNoRy9lLEVBQWdCLFNBQVVxZCxLQUFzQixHQUdsRE0sR0FDRzltQixRQUFRLFdBQ1JpbkIsWUFBWSxnREFDWkcsU0FBUyxVQUFXLHNCQUNwQkYsc0JBQXFCLEdBQ3JCUyxPQUFNL25CLEVBQUFDLElBQUFDLEVBQUMsU0FBQW1ILEVBQU9rWixHQUFhLElBQUFHLEVBQUExZixFQUFBLE9BQUFmLElBQUFnQixFQUFBLFNBQUFxRyxHQUFBLGNBQUFBLEVBQUFsRyxHQUFBLEtBQUEsRUFBQSxPQUFBa0csRUFBQWxHLEVBQUEsRUFDUHFLLEtBQWUsS0FBQSxFQUF4QixPQUFKaVYsRUFBSXBaLEVBQUF0RixFQUFBc0YsRUFBQWxHLEVBQUEsRUFDV21nQixHQUFPLENBQUViLEtBQU1BLFFBQVE3VyxFQUFXMFcsTUFBQUEsSUFBUSxLQUFBLEVBQXpEdmYsRUFBTXNHLEVBQUF0RixFQUNaZ0MsUUFBUW5ELE9BQU93QixTQUFLUyxPQUFJOUIsRUFBTSxPQUFNLEtBQUEsRUFBQSxPQUFBc0csRUFBQXZFLEVBQUEsR0FBQSxFQUFBc0UsRUFBQSxLQUd4QzZmLEdBQ0c5bUIsUUFBUSxhQUNSaW5CLFlBQVksa0RBQ1pHLFNBQVMsVUFBVyxzQkFDcEJGLHNCQUFxQixHQUNyQlMsT0FBTS9uQixFQUFBQyxJQUFBQyxFQUFDLFNBQUErSCxFQUFPc1ksR0FBYSxJQUFBRyxFQUFBMWYsRUFBQSxPQUFBZixJQUFBZ0IsRUFBQSxTQUFBaUgsR0FBQSxjQUFBQSxFQUFBOUcsR0FBQSxLQUFBLEVBQUEsT0FBQThHLEVBQUE5RyxFQUFBLEVBQ1B5SyxHQUFzQiw2Q0FBNEMsS0FBQSxFQUEzRSxPQUFKNlUsRUFBSXhZLEVBQUFsRyxFQUFBa0csRUFBQTlHLEVBQUEsRUFDV3lnQixHQUFTLENBQUVuQixLQUFBQSxFQUFNSCxNQUFBQSxJQUFRLEtBQUEsRUFBeEN2ZixFQUFNa0gsRUFBQWxHLEVBQ1pnQyxRQUFRbkQsT0FBT3dCLFNBQUtTLE9BQUk5QixFQUFNLE9BQU0sS0FBQSxFQUFBLE9BQUFrSCxFQUFBbkYsRUFBQSxHQUFBLEVBQUFrRixFQUFBLEtBR3hDaWYsR0FDRzltQixRQUFRLGVBQ1JpbkIsWUFBWSx3RUFDWkMsc0JBQXFCLEdBQ3JCUyxPQUFNL25CLEVBQUFDLElBQUFDLEVBQUMsU0FBQW1JLElBQUEsSUFBQWtJLEVBQUEsT0FBQXRRLElBQUFnQixFQUFBLFNBQUFxSCxHQUFBLGNBQUFBLEVBQUFsSCxHQUFBLEtBQUEsRUFBQSxPQUFBa0gsRUFBQWxILEVBQUEsRUFDZWtWLEtBQVcsS0FBQSxFQUExQi9GLEVBQU1qSSxFQUFBdEcsRUFDWmdDLFFBQVFuRCxPQUFPd0IsTUFBTWtPLEVBQU92UCxRQUM1QmdELFFBQVFRLEtBQUsrTCxFQUFPeFAsVUFBVSxLQUFBLEVBQUEsT0FBQXVILEVBQUF2RixFQUFBLEdBQUEsRUFBQXNGLEVBQUEsS0FHbEM2ZSxHQUNHOW1CLFFBQVEsZUFDUmluQixZQUFZLHFEQUNaRyxTQUFTLFVBQVcsOEJBQ3BCRixzQkFBcUIsR0FDckJTLE9BQU0vbkIsRUFBQUMsSUFBQUMsRUFBQyxTQUFBOEcsRUFBTytoQixHQUFzQixJQUFBL25CLEVBQUEsT0FBQWYsSUFBQWdCLEVBQUEsU0FBQWtHLEdBQUEsY0FBQUEsRUFBQS9GLEdBQUEsS0FBQSxFQUFBLE9BQUErRixFQUFBL0YsRUFBQSxFQUNkaWEsR0FBbUIwTixHQUFlLEtBQUEsRUFBakQvbkIsRUFBTW1HLEVBQUFuRixFQUNaZ0MsUUFBUW5ELE9BQU93QixNQUFNckIsR0FBUSxLQUFBLEVBQUEsT0FBQW1HLEVBQUFwRSxFQUFBLEdBQUEsRUFBQWlFLEVBQUEsS0FHakNrZ0IsR0FDRzltQixRQUFRLFlBQ1JpbkIsWUFBWSxzRkFDWkcsU0FBUyxPQUFRLGtGQUNqQkYsc0JBQXFCLEdBQ3JCUyxPQUFNL25CLEVBQUFDLElBQUFDLEVBQUMsU0FBQW9PLEVBQU8wYSxHQUFvQixJQUFBaG9CLEVBQUEsT0FBQWYsSUFBQWdCLEVBQUEsU0FBQWlOLEdBQUEsY0FBQUEsRUFBQTlNLEdBQUEsS0FBQSxFQUFBLE9BQUE4TSxFQUFBOU0sRUFBQSxFQUNaeWEsR0FBZ0JtTixHQUFZLEtBQUEsRUFBM0Nob0IsRUFBTWtOLEVBQUFsTSxFQUNaZ0MsUUFBUW5ELE9BQU93QixNQUFNckIsR0FBUSxLQUFBLEVBQUEsT0FBQWtOLEVBQUFuTCxFQUFBLEdBQUEsRUFBQXVMLEVBQUEsS0FHakM0WSxHQUNHOW1CLFFBQVEsMEJBQ1JpbkIsWUFBWSwrREFDWkMsc0JBQXFCLEdBQ3JCUyxPQUFNL25CLEVBQUFDLElBQUFDLEVBQUMsU0FBQTBPLElBQUEsSUFBQTVOLEVBQUEsT0FBQWYsSUFBQWdCLEVBQUEsU0FBQXNOLEdBQUEsY0FBQUEsRUFBQW5OLEdBQUEsS0FBQSxFQUFBLE9BQUFtTixFQUFBbk4sRUFBQSxFQUNlaWpCLEtBQXFCLEtBQUEsRUFBcENyakIsRUFBTXVOLEVBQUF2TSxFQUNaZ0MsUUFBUW5ELE9BQU93QixNQUFNckIsR0FBUSxLQUFBLEVBQUEsT0FBQXVOLEVBQUF4TCxFQUFBLEdBQUEsRUFBQTZMLEVBQUEsS0FHakNzWSxHQUNHOW1CLFFBQVEsNkJBQ1JpbkIsWUFBWSx1REFDWkMsc0JBQXFCLEdBQ3JCUyxPQUFNL25CLEVBQUFDLElBQUFDLEVBQUMsU0FBQWtmLElBQUEsSUFBQW1ELEVBQUF2aEIsRUFBQSxPQUFBZixJQUFBZ0IsRUFBQSxTQUFBb08sR0FBQSxjQUFBQSxFQUFBak8sR0FBQSxLQUFBLEVBQUEsT0FBQWlPLEVBQUFqTyxFQUFBLEVBQ2dCOGdCLEtBQXNCLEtBQUEsRUFBL0IsT0FBUEssRUFBT2xULEVBQUFyTixFQUFBcU4sRUFBQWpPLEVBQUEsRUFDUXNqQixHQUF1Qm5DLEdBQVEsS0FBQSxFQUE5Q3ZoQixFQUFNcU8sRUFBQXJOLEVBQ1pnQyxRQUFRbkQsT0FBT3dCLE1BQU1yQixHQUFRLEtBQUEsRUFBQSxPQUFBcU8sRUFBQXRNLEVBQUEsR0FBQSxFQUFBcWMsRUFBQSxXQUczQjhILEdBQVErQixXQUFXamxCLFFBQVFrbEIifQ==
|
|
4
|
+
var n,e,t="function"==typeof Symbol?Symbol:{},r=t.iterator||"@@iterator",i=t.toStringTag||"@@toStringTag";function a(t,r,i,a){var c=r&&r.prototype instanceof u?r:u,s=Object.create(c.prototype);return I(s,"_invoke",function(t,r,i){var a,u,c,s=0,l=i||[],f=!1,p={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,t){return a=e,u=0,c=n,p.n=t,o}};function d(t,r){for(u=t,c=r,e=0;!f&&s&&!i&&e<l.length;e++){var i,a=l[e],d=p.p,h=a[2];t>3?(i=h===r)&&(c=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=n):a[0]<=d&&((i=t<2&&d<a[1])?(u=0,p.v=r,p.n=a[1]):d<h&&(i=t<3||a[0]>r||r>h)&&(a[4]=t,a[5]=r,p.n=h,u=0))}if(i||t>1)return o;throw f=!0,r}return function(i,l,h){if(s>1)throw TypeError("Generator is already running");for(f&&1===l&&d(l,h),u=l,c=h;(e=u<2?n:c)||!f;){a||(u?u<3?(u>1&&(p.n=-1),d(u,c)):p.n=c:p.v=c);try{if(s=2,a){if(u||(i="next"),e=a[i]){if(!(e=e.call(a,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,u<2&&(u=0)}else 1===u&&(e=a.return)&&e.call(a),u<2&&(c=TypeError("The iterator does not provide a '"+i+"' method"),u=1);a=n}else if((e=(f=p.n<0)?c:t.call(r,p))!==o)break}catch(e){a=n,u=1,c=e}finally{s=1}}return{value:e,done:f}}}(t,i,a),!0),s}var o={};function u(){}function c(){}function s(){}e=Object.getPrototypeOf;var l=[][r]?e(e([][r]())):(I(e={},r,function(){return this}),e),f=s.prototype=u.prototype=Object.create(l);function p(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,s):(n.__proto__=s,I(n,i,"GeneratorFunction")),n.prototype=Object.create(f),n}return c.prototype=s,I(f,"constructor",s),I(s,"constructor",c),c.displayName="GeneratorFunction",I(s,i,"GeneratorFunction"),I(f),I(f,i,"Generator"),I(f,r,function(){return this}),I(f,"toString",function(){return"[object Generator]"}),(x=function(){return{w:a,m:p}})()}function I(n,e,t,r){var i=Object.defineProperty;try{i({},"",{})}catch(n){i=0}I=function(n,e,t,r){function a(e,t){I(n,e,function(n){return this._invoke(e,t,n)})}e?i?i(n,e,{value:t,enumerable:!r,configurable:!r,writable:!r}):n[e]=t:(a("next",0),a("throw",1),a("return",2))},I(n,e,t,r)}function S(n){if(null!=n){var e=n["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],t=0;if(e)return e.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length))return{next:function(){return n&&t>=n.length&&(n=void 0),{value:n&&n[t++],done:!n}}}}throw new TypeError(typeof n+" is not iterable")}function j(n,e){return function(n){if(Array.isArray(n))return n}(n)||function(n,e){var t=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=t){var r,i,a,o,u=[],c=!0,s=!1;try{if(a=(t=t.call(n)).next,0===e){if(Object(t)!==t)return;c=!1}else for(;!(c=(r=a.call(t)).done)&&(u.push(r.value),u.length!==e);c=!0);}catch(n){s=!0,i=n}finally{try{if(!c&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(s)throw i}}return u}}(n,e)||A(n,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function O(n){return function(n){if(Array.isArray(n))return d(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||A(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function R(n){"@babel/helpers - typeof";return R="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},R(n)}function A(n,e){if(n){if("string"==typeof n)return d(n,e);var t={}.toString.call(n).slice(8,-1);return"Object"===t&&n.constructor&&(t=n.constructor.name),"Map"===t||"Set"===t?Array.from(n):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?d(n,e):void 0}}var C=["SIGINT","SIGTERM","SIGHUP"],$=new Set,P=!1;function q(n,e){return E.apply(this,arguments)}function E(){return E=g(x().m(function n(e,r){var i,a,o,u,c,s,l,f,p,d,h;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===r&&(r={}),a=t(null!=(i=e[0])?i:"",e.slice(1),{detached:!0,stdio:["ignore","pipe","pipe"]}),o=T(a,r.timeoutMs),u=G(r.waitMessage,r.waitIntervalSeconds),n.n=1,M(r.logFilePath);case 1:return c=n.v,n.p=2,n.n=3,Promise.all([_(a.stdout,function(n){return c.write(n)}),_(a.stderr,function(n){return c.write(n)}),new Promise(function(n,e){a.once("error",e),a.once("close",function(e){return n(null!=e?e:1)})})]);case 3:if(s=n.v,l=j(s,3),f=l[0],p=l[1],d=l[2],!o.timedOut()){n.n=4;break}throw new Error(N("".concat(f).concat(p),o.timeoutMs,e));case 4:if(0!==d){n.n=5;break}return n.a(2,f);case 5:throw h="".concat(f).concat(p),new Error(h||"Command failed: ".concat(e.join(" ")));case 6:return n.p=6,n.n=7,c.close();case 7:return o.clear(),u(),n.f(6);case 8:return n.a(2)}},n,null,[[2,,6,8]])})),E.apply(this,arguments)}function N(n,e,t){var r="Command timed out after ".concat(function(n){if(n%36e5==0)return"".concat(n/36e5,"h");if(n%6e4==0)return"".concat(n/6e4,"m");if(n%1e3==0)return"".concat(n/1e3,"s");return"".concat(n,"ms")}(e),": ").concat(t.join(" "));return n.length>0?"".concat(n,"\n").concat(r):r}function T(n,e){void 0===e&&(e=36e5);var t,r=!1;$.add(n),function(){if(P)return;P=!0;var n,e=w(C);try{var t=function(){var e=n.value;process.once(e,function(){var n,t=w($);try{for(t.s();!(n=t.n()).done;){L(n.value,e)}}catch(n){t.e(n)}finally{t.f()}process.exit(128+function(n){switch(n){case"SIGINT":return 2;case"SIGTERM":return 15;case"SIGHUP":return 1}}(e))})};for(e.s();!(n=e.n()).done;)t()}catch(n){e.e(n)}finally{e.f()}}();var i=setTimeout(function(){r=!0,L(n,"SIGTERM"),(t=setTimeout(function(){return L(n,"SIGKILL")},5e3)).unref()},e);return i.unref(),{clear:function(){clearTimeout(i),t&&clearTimeout(t),$.delete(n)},timedOut:function(){return r},timeoutMs:e}}function L(n,e){if(n.pid&&n.pid>0)try{return void process.kill(-n.pid,e)}catch(n){}n.kill(e)}function _(n,e){return D.apply(this,arguments)}function D(){return(D=g(x().m(function n(e,t){var r,i,a,o,u,c,s,l,f,p,d;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:r=[],i=new TextDecoder,a=!1,o=!1,n.p=2,c=h(e);case 3:return n.n=4,c.next();case 4:if(!(a=!(s=n.v).done)){n.n=6;break}l=s.value,f="string"==typeof l?l:i.decode(new Uint8Array(l),{stream:!0}),r.push(f),null==t||t(f);case 5:a=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,d=n.v,o=!0,u=d;case 8:if(n.p=8,n.p=9,!a||null==c.return){n.n=10;break}return n.n=10,c.return();case 10:if(n.p=10,!o){n.n=11;break}throw u;case 11:return n.f(10);case 12:return n.f(8);case 13:return(p=i.decode())&&(r.push(p),null==t||t(p)),n.a(2,r.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function G(n,e,t){if(void 0===e&&(e=36),void 0===t&&(t=function(n){return process.stderr.write(n)}),!n)return function(){};var r=0,i=setInterval(function(){t("."),(r+=1)<=100&&r%5==0&&t(" ".concat(r,"% done "))},1e3*e);return t("".concat(n," ").concat("This can take up to 1 hour; dots indicate progress",": ")),function(){clearInterval(i),t("\n")}}function M(n){return U.apply(this,arguments)}function U(){return U=g(x().m(function n(e){var t,r,u;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,{write:function(){},close:function(){var n=g(x().m(function n(){return x().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()});case 1:return t=function(n){process.stderr.write("Warning: Failed to write command log to ".concat(e,": ").concat(String(n),"\n"))},n.p=2,n.n=3,a(o(e),{recursive:!0});case 3:return(r=i(e,{flags:"w"})).on("error",t),n.a(2,{write:function(n){r.writable&&r.write(n)},close:function(){var n=g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,new Promise(function(n){r.end(function(){return n()})});case 1:return n.a(2,n.v)}},n)}));return function(){return n.apply(this,arguments)}}()});case 4:return n.p=4,u=n.v,t(u),n.a(2,{write:function(){},close:function(){var n=g(x().m(function n(){return x().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()})}},n,null,[[2,4]])})),U.apply(this,arguments)}var F="There is no concern.",H=["codex","claude","gemini"],W=new RegExp("\\b".concat("there is no concern","\\b"),"i");function J(n,e){return B.apply(this,arguments)}function B(){return(B=g(x().m(function n(e,t){var r,i,a;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t={allAgentsLabel:"agents"}),n.n=1,e;case 1:return r=n.v,i=G(Z(t.allAgentsLabel)),n.p=2,n.n=3,Promise.all(H.map(g(x().m(function n(e){var i,a,o,u;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Q(e,r,{waitMessage:!1});case 1:return u=n.v.trim(),n.a(2,null!=(i=null==(a=(o=t).mapOutput)?void 0:a.call(o,e,u))?i:"## ".concat(K(e),"\n\n").concat(u))}},n)}))));case 3:return a=n.v.filter(function(n){return void 0!==n}),n.a(2,a.length>0?a.join("\n\n"):F);case 4:return n.p=4,i(),n.f(4);case 5:return n.a(2)}},n,null,[[2,,4,5]])}))).apply(this,arguments)}function Q(n,e,t){return Y.apply(this,arguments)}function Y(){return(Y=g(x().m(function n(e,t,r){var i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:return void 0===r&&(r={}),i=q,a=z,o=e,n.n=1,t;case 1:return n.a(2,i(a(o,n.v),{logFilePath:V(e),waitMessage:void 0===r.waitMessage?Z(K(e)):r.waitMessage}))}},n)}))).apply(this,arguments)}function z(n,e){switch(n){case"codex":return["npx","--yes","@openai/codex@latest","exec","--dangerously-bypass-approvals-and-sandbox",e];case"claude":return["claude","--dangerously-skip-permissions","-p",e];case"gemini":return["npx","--yes","@google/gemini-cli@preview","--approval-mode","yolo","--model","gemini-3.1-pro-preview","-p",e]}}function K(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function Z(n){return"Waiting for ".concat(n," to finish.")}function V(n){return"logs/".concat(n,"-").concat((e=new Date,t=j([e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()].map(X),5),r=t[0],i=t[1],a=t[2],o=t[3],u=t[4],"".concat(r).concat(i,"-").concat(a).concat(o).concat(u)),".log");var e,t,r,i,a,o,u}function X(n){return n.toString().padStart(2,"0")}var nn={blockQuote:"literal",lineWidth:0};function en(n){c.write("".concat(n,"\n"))}function tn(n,e){void 0===e&&(e=1),c.write("".concat(n,"\n")),process.exit(e)}function rn(){return an.apply(this,arguments)}function an(){return(an=g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:if(!u.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,_(u);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function on(n){return un.apply(this,arguments)}function un(){return(un=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return void 0===e&&(e="Error: input is required on stdin"),n.n=1,rn();case 1:if(!((t=n.v).length>0)){n.n=2;break}return n.a(2,t);case 2:tn(e,2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function cn(n,e){return sn.apply(this,arguments)}function sn(){return sn=g(x().m(function n(e,r){var i,a,o,u,c;return x().w(function(n){for(;;)switch(n.n){case 0:void 0===r&&(r={}),a=null!=(i=r.allowedExitCodes)?i:[],o=x().m(function n(){var i,o,u,l,f,p,d,h,m,v,g;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return o=t(null!=(i=e[0])?i:"",e.slice(1),{detached:!0,stdio:["pipe","pipe","pipe"]}),l=!1,f=T(o),n.p=1,void 0!==r.stdinData?o.stdin.end(r.stdinData):o.stdin.end(),n.n=2,Promise.all([_(o.stdout),_(o.stderr),new Promise(function(n,e){o.once("error",e),o.once("close",function(e){return n(null!=e?e:1)})})]);case 2:if(p=n.v,d=j(p,3),h=d[0],m=d[1],v=d[2],g="".concat(h).concat(m),!f.timedOut()){n.n=3;break}u=N(g,f.timeoutMs,e),n.n=5;break;case 3:if(0!==v&&!a.includes(v)){n.n=4;break}return n.a(2,{v:g});case 4:In(e,v,g)&&c<3?l=!0:u=g||"Command failed: ".concat(e.join(" "));case 5:return n.p=5,f.clear(),n.f(5);case 6:if(!l){n.n=8;break}return en("Transient GitHub CLI failure; retrying... (attempt ".concat(c," of ").concat(2,")")),n.n=7,s(1e3*c);case 7:return n.a(2,0);case 8:u&&tn(u);case 9:return n.a(2)}},n,null,[[1,,5,6]])}),c=1;case 1:if(!(c<=3)){n.n=5;break}return n.d(S(o()),2);case 2:if(0!==(u=n.v)){n.n=3;break}return n.a(3,4);case 3:if(!u){n.n=4;break}return n.a(2,u.v);case 4:c+=1,n.n=1;break;case 5:tn("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),sn.apply(this,arguments)}function ln(n,e){return fn.apply(this,arguments)}function fn(){return(fn=g(x().m(function n(e,t){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,cn(["gh"].concat(O(e)),{stdinData:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function pn(n,e,t){return dn.apply(this,arguments)}function dn(){return(dn=g(x().m(function n(e,t,r){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,cn(["gh"].concat(O(e)),{stdinData:r,allowedExitCodes:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function hn(){return mn.apply(this,arguments)}function mn(){return(mn=g(x().m(function n(){var e,t,r,i,a;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v.trim(),t=e.split("/",2),r=j(t,2),i=r[0],a=r[1],i&&a||tn("Error: could not determine current repository"),n.a(2,[i,a])}},n)}))).apply(this,arguments)}function vn(){return gn.apply(this,arguments)}function gn(){return(gn=g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln(["pr","view","--json","number","--jq",".number"]);case 1:return n.a(2,n.v.trim())}},n)}))).apply(this,arguments)}function wn(n,e){return yn.apply(this,arguments)}function yn(){return(yn=g(x().m(function n(e,t){var r,i,a,o,u,c,s,l,f;return x().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),r=["api","graphql","-F","query=@-"],i=0,a=Object.entries(t);case 1:if(!(i<a.length)){n.n=4;break}if(o=j(a[i],2),u=o[0],void 0!==(c=o[1])&&""!==c){n.n=2;break}return n.a(3,3);case 2:r.push("-F","".concat(u,"=").concat(c));case 3:i++,n.n=1;break;case 4:return f=JSON,n.n=5,ln(r,e);case 5:if(s=f.parse.call(f,n.v),Array.isArray(s.errors)){n.n=6;break}return n.a(2,s);case 6:l=s.errors.map(function(n){var e;return null!=(e=n.message)?e:"Unknown GraphQL error"}).join("\n"),tn("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function bn(n){return f(n,nn)}function kn(n){return JSON.parse(JSON.stringify(n))}function xn(n,e){var t,i,a,o,u=r(null!=(t=n[0])?t:"",n.slice(1),{encoding:"utf8",input:e});return{exitCode:null!=(i=u.status)?i:u.error?1:0,output:"".concat(null!=(a=u.stdout)?a:"").concat(null!=(o=u.stderr)?o:"")}}function In(n,e,t){return"gh"===n[0]&&0!==e&&/(HTTP 50[0234]\b|We had issues producing the response to your request)/i.test(t)}var Sn=/\btest\b/i,jn=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","jobs","name","number","startedAt","status","updatedAt","url","workflowName"],On=/^.*?\tUNKNOWN STEP\t\d{4}-\d{2}-\d{2}T[^Z]+Z\s*/,Rn=0===xn(["rtk","--version"]).exitCode;function An(n){return Cn.apply(this,arguments)}function Cn(){return(Cn=g(x().m(function n(e){var t,r,i,a,o,u,c,s,l,f;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return u=["pr","checks"],e&&u.push(e),u.push("--json","bucket,completedAt,description,event,link,name,startedAt,state,workflow"),c=[],n.p=1,n.n=2,pn(u,[8]);case 2:s=n.v,c=s.trim().length>0?JSON.parse(s):[],n.n=5;break;case 3:if(n.p=3,!((f=n.v)instanceof SyntaxError)){n.n=4;break}c=[],n.n=5;break;case 4:throw f;case 5:return l=c.reduce(function(n,e){var t,r,i=null!=(t=e.bucket)?t:"";return n[i]=(null!=(r=n[i])?r:0)+1,n},{}),n.a(2,{summary:{total:c.length,pass:null!=(t=l.pass)?t:0,fail:null!=(r=l.fail)?r:0,pending:null!=(i=l.pending)?i:0,skipping:null!=(a=l.skipping)?a:0,cancel:null!=(o=l.cancel)?o:0},checks:c})}},n,null,[[1,3]])}))).apply(this,arguments)}function $n(n,e,t,r){return Pn.apply(this,arguments)}function Pn(){return(Pn=g(x().m(function n(e,t,r,i){var a,o,u,s,l,f,p,d;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t=Mn),void 0===r&&(r=An),void 0===i&&(i=function(n){return c.write(n)}),a=0,n.n=1,r(e);case 1:o=n.v,u=function(){},n.p=2;case 3:if(s=qn(o),l=En(s),f=j(l,2),p=f[0],d=f[1],!(Object.keys(p).length>0||0===Object.keys(d).length)){n.n=4;break}return n.a(2,[o,a,!1]);case 4:if(!(a>=100)){n.n=5;break}return n.a(2,[o,a,!0]);case 5:return 1===(a+=1)&&(u=G("Waiting for test-related workflows to finish.",36,i)),n.n=6,t(36);case 6:return n.n=7,r(e);case 7:o=n.v;case 8:n.n=3;break;case 9:return n.p=9,u(),n.f(9);case 10:return n.a(2)}},n,null,[[2,,9,10]])}))).apply(this,arguments)}function qn(n){var e=n.checks.reduce(function(n,e){var t=e.workflow||e.name||"unknown_workflow";return null!=n[t]||(n[t]=[]),n[t].push(e),n},{});return Object.fromEntries(Object.entries(e).map(function(n){var e,t=j(n,2),r=t[0],i=function(n){var e=n.reduce(function(n,e){var t=function(n){var e=Nn(n);return e?"run:".concat(e):"unknown_run"}(e),r=n.get(t);return r?(r.push(e),n):(n.set(t,[e]),n)},new Map);return Array.from(e.values()).reduce(function(n,e){return 0===n.length||Wn(e)>Wn(n)?e:n},[])}(t[1]),a=i[0];a||tn("Error: no checks found for workflow ".concat(r));var o=null!=(e=i.reduce(function(n,e){return n?Dn(e)>Dn(n)?e:n:e},void 0))?e:a;return[r,{classification:_n(i),check:o,checks:i}]}))}function En(n){for(var e={},t={},r=0,i=Object.entries(n);r<i.length;r++){var a=j(i[r],2),o=a[0],u=a[1];"failed"!==u.classification?"running"===u.classification&&u.checks.some(function(n){return Gn(n)})&&(t[o]=u):e[o]=u}return[e,t]}function Nn(n){var e,t=null==n?void 0:n.link;if(t)return null==(e=t.match(/\/actions\/runs\/(\d+)/))?void 0:e[1]}function Tn(n){return Ln.apply(this,arguments)}function Ln(){return(Ln=g(x().m(function n(e){var t,r;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,void 0);case 1:return n.n=2,pn(["run","view",e,"--json",jn.join(",")],[1]);case 2:if(0!==(t=n.v).trim().length){n.n=3;break}return n.a(2,void 0);case 3:return n.p=3,n.a(2,JSON.parse(t));case 4:if(n.p=4,!((r=n.v)instanceof SyntaxError)){n.n=5;break}return c.write("Warning: Could not parse JSON for workflow run ".concat(e,": ").concat(r.message,"\n")),n.a(2,void 0);case 5:throw r;case 6:return n.a(2)}},n,null,[[3,4]])}))).apply(this,arguments)}function _n(n){var e=n.map(function(n){var e;return null!=(e=n.bucket)?e:""});return e.some(function(n){return!["pass","skipping","pending"].includes(n)})?"failed":e.includes("pending")?"running":"successful"}function Dn(n){var e,t=n.completedAt;return t&&"0001-01-01T00:00:00Z"!==t?t:null!=(e=n.startedAt)?e:""}function Gn(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&Sn.test(n)})}function Mn(n){return Un.apply(this,arguments)}function Un(){return(Un=g(x().m(function n(e){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,s(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Fn(){return Hn.apply(this,arguments)}function Hn(){return(Hn=g(x().m(function n(){var e,t,r,i,a,o,u,c,s,l,f,p;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,vn();case 1:return e=n.v,en("Fetching latest CI results..."),n.n=2,$n(e);case 2:if(t=n.v,r=j(t,3),i=r[0],a=r[1],o=r[2],u=qn(i),c=En(u),s=j(c,2),l=s[0],f=s[1],p={summary:kn(i.summary),waited_for_test_related_checks:a>0,test_related_check_wait_attempts:a,test_related_check_wait_timed_out:o},!(Object.keys(l).length>0)){n.n=4;break}return n.n=3,Promise.all(Object.entries(l).map(g(x().m(function n(e){var t,r,i,a,o,u,c;return x().w(function(n){for(;;)switch(n.n){case 0:return t=j(e,2),r=t[0],i=t[1],n.n=1,Jn(r,i);case 1:return a=n.v,o=k,u=k({},a),c=zn,n.n=2,Qn(i.check);case 2:return n.a(2,o(u,c(n.v)))}},n)}))));case 3:return p.failed_workflows=n.v,n.a(2,{output:bn(p),exitCode:1});case 4:if(!(Object.keys(f).length>0)){n.n=6;break}return p.test_workflow_output="Timed out waiting for test-related workflows to finish.",n.n=5,Promise.all(Object.entries(f).map(function(n){var e=j(n,2);return Jn(e[0],e[1])}));case 5:return p.running_test_related_workflows=n.v,n.a(2,{output:bn(p),exitCode:1});case 6:return n.a(2,{output:"All CI workflows passed.\n",exitCode:0})}},n)}))).apply(this,arguments)}function Wn(n){return n.reduce(function(n,e){var t=Dn(e);return t>n?t:n},"")}function Jn(n,e){return Bn.apply(this,arguments)}function Bn(){return(Bn=g(x().m(function n(e,t){var r,i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:return i=Nn(t.check),n.n=1,Tn(i);case 1:return a=n.v,o=Xn(a,Vn(t.check.name)),n.a(2,{classification:t.classification,workflow:e,job:Vn(t.check.name),job_url:Vn(null==o?void 0:o.url),failed_step:ne(o),run_id:i,run_url:null!=(r=Vn(null==a?void 0:a.url))?r:Vn(t.check.link),branch:Vn(null==a?void 0:a.headBranch),sha:Vn(null==a?void 0:a.headSha),conclusion:Vn(null==a?void 0:a.conclusion)})}},n)}))).apply(this,arguments)}function Qn(n){return Yn.apply(this,arguments)}function Yn(){return(Yn=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:if(t=Nn(e)){n.n=1;break}return n.a(2,"Failed latest result has no GitHub Actions run link.");case 1:return n.n=2,pn(["run","view",t,"--log-failed"],[1]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function zn(n){return{failed_log:Kn(n)}}function Kn(n){var e=Zn(l(n));if(!Rn)return e;var t=xn(["rtk","log"],e);return 0===t.exitCode&&t.output.trim().length>0?Zn(t.output):e}function Zn(n){return n.split("\n").map(function(n){return n.replace(On,"")}).join("\n").trim()}function Vn(n){return"string"==typeof n&&n.length>0?n:void 0}function Xn(n,e){var t,r;if(null!=n&&n.jobs&&0!==n.jobs.length)return null!=(t=null!=(r=n.jobs.find(function(n){return n.name===e}))?r:n.jobs.find(function(n){return"failure"===n.conclusion}))?t:n.jobs.find(function(n){return"completed"!==n.status})}function ne(n){var e,t,r;if(null!=n&&n.steps&&0!==n.steps.length)return null!=(e=null==(t=n.steps.find(function(n){return"failure"===n.conclusion}))?void 0:t.name)?e:null==(r=n.steps.find(function(n){return"completed"!==n.status}))?void 0:r.name}function ee(){return te.apply(this,arguments)}function te(){return(te=g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ae();case 1:if(null==(e=n.v)){n.n=2;break}t=e,n.n=4;break;case 2:return n.n=3,re();case 3:t=n.v;case 4:return n.a(2,t)}},n)}))).apply(this,arguments)}function re(){return ie.apply(this,arguments)}function ie(){return(ie=g(x().m(function n(){var e;return x().w(function(n){for(;;)switch(n.n){case 0:return e=ce,n.n=1,q(["gh","repo","view","--json","defaultBranchRef","--template","{{.defaultBranchRef.name}}"]);case 1:return n.a(2,e(n.v.trim(),"Error: could not determine the default branch"))}},n)}))).apply(this,arguments)}function ae(){return oe.apply(this,arguments)}function oe(){return(oe=g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,q(["gh","pr","view","--json","baseRefName","--template","{{.baseRefName}}"]);case 1:return e=n.v.trim(),n.a(2,e.length>0?e:void 0);case 2:if(n.p=2,!ue(t=n.v)){n.n=3;break}return n.a(2,void 0);case 3:throw t;case 4:return n.a(2)}},n,null,[[0,2]])}))).apply(this,arguments)}function ue(n){return/no pull requests? found for branch/i.test(String(n))}function ce(n,e){if(n.length>0)return n;throw new Error(e)}function se(n){return ye(n,"issue")}function le(n){return ye(n,"pull request")}function fe(n){return pe.apply(this,arguments)}function pe(){return(pe=g(x().m(function n(e){var t,r,i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,hn();case 1:return t=n.v,r=j(t,2),i=r[0],a=r[1],n.n=2,be(i,a,se(e));case 2:return o=n.v,en("Fetched issue #".concat(o.number," messages.")),n.a(2,bn({issue:o}))}},n)}))).apply(this,arguments)}function de(n){return he.apply(this,arguments)}function he(){return(he=g(x().m(function n(e){var t,r,i;return x().w(function(n){for(;;)switch(n.n){case 0:if(void 0!==e){n.n=2;break}return n.n=1,vn();case 1:i=n.v,n.n=3;break;case 2:i=le(e);case 3:return t=i,n.n=4,ge(t);case 4:return r=n.v,en("Fetched pull request #".concat(r.number," messages.")),n.a(2,bn({pull_request:r}))}},n)}))).apply(this,arguments)}function me(){return ve.apply(this,arguments)}function ve(){return(ve=g(x().m(function n(){var e,t,r;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,pn(["pr","view","--json","number","--jq",".number"],[1]);case 1:if(e=n.v,t=e.trim(),!ue(e)&&/^\d+$/.test(t)){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,ge(t);case 3:return r=n.v,n.a(2,bn({pull_request:r}))}},n)}))).apply(this,arguments)}function ge(n){return we.apply(this,arguments)}function we(){return(we=g(x().m(function n(e){var t,r,i,a;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,hn();case 1:return t=n.v,r=j(t,2),i=r[0],a=r[1],n.n=2,xe(i,a,e);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function ye(n,e){var t=String(n).trim();if(0===t.length&&tn("Error: ".concat(e," reference is required"),2),/^\d+$/.test(t))return t;var r="issue"===e?"issues":"pull",i=t.match(new RegExp("^https?://(?:www\\.)?github\\.com/[^/]+/[^/]+/".concat(r,"/(\\d+)(?:/|$)")));if(null!=i&&i[1])return i[1];tn("Error: expected a GitHub ".concat(e,' number or URL, received "').concat(t,'"'),2)}function be(n,e,t){return ke.apply(this,arguments)}function ke(){return(ke=g(x().m(function n(e,t,r){var i,a;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Pe({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:t,number:r,noun:"issue",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.issue}});case 1:return i=n.v,n.n=2,Ce({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.issue)?void 0:e.comments},mapNode:Ee});case 2:return a=n.v,n.a(2,k(k({},i),{},{messages:a}))}},n)}))).apply(this,arguments)}function xe(n,e,t){return Ie.apply(this,arguments)}function Ie(){return(Ie=g(x().m(function n(e,t,r){var i,a,o,u,c;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Pe({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:t,number:r,noun:"pull request",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.pullRequest}});case 1:return i=n.v,n.n=2,Promise.all([je(e,t,r),Re(e,t,r)]);case 2:return a=n.v,o=j(a,2),u=o[0],c=o[1],n.a(2,k(k({},i),{},{messages:[].concat(O(u),O(c)).sort(Se)}))}},n)}))).apply(this,arguments)}function Se(n,e){var t="string"==typeof n.createdAt?n.createdAt:"",r="string"==typeof e.createdAt?e.createdAt:"";return t.localeCompare(r)}function je(n,e,t){return Oe.apply(this,arguments)}function Oe(){return(Oe=g(x().m(function n(e,t,r){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ce({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.comments},mapNode:Ee});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Re(n,e,t){return Ae.apply(this,arguments)}function Ae(){return(Ae=g(x().m(function n(e,t,r){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ce({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviews(first: 100, after: $cursor) {\n nodes {\n id\n body\n state\n submittedAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.reviews},mapNode:Ne});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Ce(n){return $e.apply(this,arguments)}function $e(){return($e=g(x().m(function n(e){var t,r,i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:r=[];case 1:return o=e,n.n=2,wn(e.query,{owner:e.owner,name:e.name,number:Number(e.number),cursor:t});case 2:if(a=o.selectConnection.call(o,n.v)){n.n=3;break}return n.a(2,r);case 3:if(r.push.apply(r,O(a.nodes.map(e.mapNode).filter(Te))),a.pageInfo.hasNextPage){n.n=4;break}return n.a(2,r);case 4:t=null!=(i=a.pageInfo.endCursor)?i:void 0;case 5:n.n=1;break;case 6:return n.a(2)}},n)}))).apply(this,arguments)}function Pe(n){return qe.apply(this,arguments)}function qe(){return(qe=g(x().m(function n(e){var t,r,i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:return o=e,n.n=1,wn(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(a=o.selectMetadata.call(o,n.v))||tn("Could not find ".concat(e.noun," #").concat(e.number," in ").concat(e.owner,"/").concat(e.name,".")),n.a(2,{number:a.number,title:a.title,url:a.url,author:null!=(t=null==(r=a.author)?void 0:r.login)?t:void 0,body:null!=(i=a.body)?i:""})}},n)}))).apply(this,arguments)}function Ee(n){var e,t;return{type:"comment",author:null!=(e=null==(t=n.author)?void 0:t.login)?e:void 0,createdAt:n.createdAt,url:n.url,body:n.body}}function Ne(n){var e,t,r,i,a;return{type:"review",author:null!=(e=null==(t=n.author)?void 0:t.login)?e:void 0,state:null!=(r=n.state)?r:void 0,createdAt:null!=(i=n.submittedAt)?i:void 0,url:n.url,body:null!=(a=n.body)?a:""}}function Te(n){return"string"==typeof n.body&&n.body.length>0}function Le(n){return _e.apply(this,arguments)}function _e(){return(_e=g(x().m(function n(e){var t,r,i,a,o,u,c,s;return x().w(function(n){for(;;)switch(n.n){case 0:return r=(t=void 0===e?{}:e).body,i=t.title,n.n=1,cn(["git","branch","--show-current"]);case 1:return a=n.v.trim(),n.n=2,ln(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return o=n.v.trim(),a||tn("Error: could not determine current branch"),o||tn("Error: could not determine default branch"),a===o&&tn("Error: current branch is the default branch (".concat(o,")")),u=["pr","create","--base",o,"--head",a,"--fill"],i&&u.push("--title",i),r&&u.push("--body-file","-"),en("Creating pull request..."),n.n=3,ln(u,r);case 3:return c=bn,s=JSON,n.n=4,ln(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,c(s.parse.call(s,n.v)))}},n)}))).apply(this,arguments)}function De(n){return Ge.apply(this,arguments)}function Ge(){return(Ge=g(x().m(function n(e){var t,r,i;return x().w(function(n){for(;;)switch(n.n){case 0:return t=e.body,r=e.title,n.n=1,vn();case 1:return i=n.v,en("Updating pull request #".concat(i,"...")),n.n=2,Me(i,["--title",r,"--body-file","-"],t);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Me(n,e,t){return Ue.apply(this,arguments)}function Ue(){return(Ue=g(x().m(function n(e,t,r){var i,a;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln(["pr","edit",e].concat(O(t)),r);case 1:return i=bn,a=JSON,n.n=2,ln(["pr","view",e,"--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author,body"]);case 2:return n.a(2,i(a.parse.call(a,n.v)))}},n)}))).apply(this,arguments)}function Fe(){return He.apply(this,arguments)}function He(){return(He=g(x().m(function n(){var e,t,r,i,a,o,u,c;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,on("Error: JSON input is required on stdin");case 1:for(e=n.v,t=et(e),r={},i=0,a=Object.entries(t.replies);i<a.length;i++)o=j(a[i],2),u=o[0],"string"==typeof(c=o[1])&&c.length>0&&(r[u]=c);return n.a(2,r)}},n)}))).apply(this,arguments)}function We(n,e,t,r,i){return Je.apply(this,arguments)}function Je(){return(Je=g(x().m(function n(e,t,r,i,a){var o,u,c,s,l,f,p,d,h,m,v,g;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,wn(e,{owner:t,name:r,number:Number(i),cursor:o});case 1:if(m=u=n.v.data,h=null==m){n.n=2;break}h=null==(u=u.repository);case 2:if(d=h){n.n=3;break}d=null==(u=u.pullRequest);case 3:if(!d){n.n=4;break}v=void 0,n.n=5;break;case 4:v=u.reviewThreads;case 5:(s=v)||tn("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),l=w(s.nodes),n.p=6,l.s();case 7:if((f=l.n()).done){n.n=9;break}return p=f.value,n.n=8,a(p);case 8:n.n=7;break;case 9:n.n=11;break;case 10:n.p=10,g=n.v,l.e(g);case 11:return n.p=11,l.f(),n.f(11);case 12:if(s.pageInfo.hasNextPage){n.n=13;break}return n.a(2);case 13:o=null!=(c=s.pageInfo.endCursor)?c:void 0;case 14:n.n=0;break;case 15:return n.a(2)}},n,null,[[6,10,11,12]])}))).apply(this,arguments)}function Be(n,e,t){return Qe.apply(this,arguments)}function Qe(){return(Qe=g(x().m(function n(e,t,r){var i;return x().w(function(n){for(;;)switch(n.n){case 0:return i=[],n.n=1,We("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,t,r,function(n){n.isResolved||i.push(n.id)});case 1:return n.a(2,i)}},n)}))).apply(this,arguments)}function Ye(n,e,t){return ze.apply(this,arguments)}function ze(){return(ze=g(x().m(function n(e,t,r){var i;return x().w(function(n){for(;;)switch(n.n){case 0:return i=[],n.n=1,We("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n isOutdated\n path\n line\n originalLine\n startLine\n originalStartLine\n comments(first: 100) {\n nodes {\n id\n url\n body\n createdAt\n diffHunk\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,t,r,g(x().m(function n(e){var t,r,a,o,u,c,s,l,f,p;return x().w(function(n){for(;;)switch(n.n){case 0:if(!e.isResolved){n.n=1;break}return n.a(2);case 1:r=e.comments.nodes.map(nt),a=e.comments.pageInfo,o=null!=(t=a.endCursor)?t:void 0;case 2:if(!a.hasNextPage){n.n=7;break}return n.n=3,wn("\n query($threadId: ID!, $cursor: String) {\n node(id: $threadId) {\n ... on PullRequestReviewThread {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n url\n body\n createdAt\n diffHunk\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",{threadId:e.id,cursor:o});case 3:if(f=u=n.v.data,l=null==f){n.n=4;break}l=null==(u=u.node);case 4:if(!l){n.n=5;break}p=void 0,n.n=6;break;case 5:p=u.comments;case 6:(s=p)||tn("Could not find comments in GraphQL response for thread ".concat(e.id,".")),r.push.apply(r,O(s.nodes.map(nt))),a=s.pageInfo,o=null!=(c=a.endCursor)?c:void 0,n.n=2;break;case 7:i.push({id:e.id,isResolved:e.isResolved,isOutdated:e.isOutdated,path:e.path,line:e.line,originalLine:e.originalLine,startLine:e.startLine,originalStartLine:e.originalStartLine,comments:r});case 8:return n.a(2)}},n)})));case 1:return n.a(2,i)}},n)}))).apply(this,arguments)}function Ke(){return Ze.apply(this,arguments)}function Ze(){return(Ze=g(x().m(function n(){var e,t,r,i,a,o,u;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,hn();case 1:return e=n.v,t=j(e,2),r=t[0],i=t[1],n.n=2,vn();case 2:return a=n.v,en("Fetching unresolved review threads..."),o=bn,n.n=3,Ye(r,i,a);case 3:return u=n.v,n.a(2,o({unresolved_threads:u}))}},n)}))).apply(this,arguments)}function Ve(n){return Xe.apply(this,arguments)}function Xe(){return(Xe=g(x().m(function n(e){var t,r,i,a,o,u,c,s,l,f,p,d,h,m,v,g,y,b,k,I;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,hn();case 1:return t=n.v,r=j(t,2),i=r[0],a=r[1],n.n=2,vn();case 2:return o=n.v,b=Set,n.n=3,Be(i,a,o);case 3:k=n.v,u=new b(k),en("Replying to ".concat(Object.keys(e).length," review threads...")),c=[],s=Object.entries(e),l=w(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(d=j(f.value,2),h=d[0],m=j(d[1],2),v=m[0],g=m[1],en("Processing ".concat(h+1,"/").concat(s.length,": ").concat(v)),u.has(v)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,wn("\n mutation($threadId: ID!, $body: String!) {\n addPullRequestReviewThreadReply(input: {pullRequestReviewThreadId: $threadId, body: $body}) {\n comment {\n id\n url\n }\n }\n resolveReviewThread(input: {threadId: $threadId}) {\n thread {\n id\n isResolved\n }\n }\n }\n ",{threadId:v,body:g});case 7:y=n.v,null!=(p=y.data)&&null!=(p=p.resolveReviewThread)&&null!=(p=p.thread)&&p.isResolved?c.push(v):en("Warning: failed to resolve thread ".concat(v,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,I=n.v,l.e(I);case 11:return n.p=11,l.f(),n.f(11);case 12:return en("Done."),n.a(2,bn({resolved_thread_ids:c}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function nt(n){var e,t;return k(k({},n),{},{author:"string"==typeof n.author?n.author:null!=(e=null==(t=n.author)?void 0:t.login)?e:null})}function et(n){try{var e=JSON.parse(n);return function(n){if("object"!==R(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==R(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||tn("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&tn("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function tt(n){return rt.apply(this,arguments)}function rt(){return(rt=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,fe(e);case 1:return t=n.v,n.a(2,"\nPlan a GitHub issue by gathering context, writing a specification for software engineers, and posting or updating that specification back to the issue.\nThe target issue number is #".concat(e,". Here is the fetched issue context as YAML:\n~~~~yaml\n").concat(t.trim(),"\n~~~~\n\nFollow this workflow:\n1. Read the above issue body and timeline messages carefully.\n2. Collect enough supporting information before writing the specification:\n - Inspect the relevant code, surrounding call sites, related types, tests, configuration, recent diffs, and any other local context needed to understand the change.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the issue depends on runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - Clean up any temporary files after the experiment.\n - If the issue depends on a library, API, or language feature, confirm it against the latest official documentation or another primary source instead of relying on memory.\n3. Write the specification for the issue comment.\n - Write the background based on the collected information.\n - Define a goal that clearly guides our implementation in the right direction.\n - Write a detailed specification incorporating the evidence you collected.\n - If needed, include code snippets that explain how to use libraries or APIs, along with references to their documentation.\n4. Post the specification back to issue #").concat(e,", then print the issue URL.\n - If the issue already has a specification, update the existing comment instead of posting a new one.\n\nFormat the issue comment exactly like this, but do not include the surrounding `~~~~` fences in the actual comment:\n~~~~\n## Background\n\n[Summarize the current behavior and explain the motivation behind this issue]\n\n## Goal\n\n[Define the goal we want to achieve in this issue]\n\n## Specification\n\n[Detailed specification for software engineers]\n\n## Key Technologies (ONLY if external resources are needed)\n\n[Describe what libraries or APIs we should use, including concrete versions and code snippets.]\n\n~~~~\n").trim())}},n)}))).apply(this,arguments)}function it(n){return"git merge-base ".concat(at("origin/".concat(n))," HEAD 2>/dev/null || git merge-base ").concat(at(n)," HEAD")}function at(n){return"'".concat(n.replaceAll("'","'\"'\"'"),"'")}function ot(){return ut.apply(this,arguments)}function ut(){return(ut=g(x().m(function n(){var e,t,r;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ee();case 1:return e=n.v,t=it(e),n.n=2,me();case 2:return r=n.v,n.a(2,"\nReview the current ".concat(r?"pull request":"branch"," against its base branch ").concat(e,' via `git diff "$(').concat(t,')"`.\nFor each finding, do the following three steps:\n1. Gather supporting evidence:\n - Inspect the referenced code and the surrounding call sites, related types, tests, configuration, and recent diffs when they affect the claim.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the finding is about runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - Clean up any temporary files after the experiment.\n - If the finding depends on framework, library, platform, or language behavior, confirm it against the latest official documentation or another primary source instead of relying on memory.\n2. Judge whether the finding is valid:\n - Mark it valid only when the available evidence shows the reported issue is still real in the current codebase.\n - Otherwise, mark it not valid.\n3. Propose a fix without modifying the code:\n - Describe the smallest practical change that would address the finding.\n - Investigate the likely impact of that change by inspecting the affected call sites, related types, tests, configuration, and adjacent behavior, and note any follow-up changes or risks the fix would need to account for.\n\nReport only the valid findings, the evidence for each one, and the proposed fix with its likely impact. Include a brief justification for each, citing the evidence used (e.g., a failing scenario, experiment result, or official documentation). Do not modify the code.\nIf there are no valid findings, respond exactly with: `').concat(F,"`\n\n").concat(ct(r),"\n").trim())}},n)}))).apply(this,arguments)}function ct(n){return n?"Current pull request context:\n~~~~yaml\n".concat(n.trim(),"\n~~~~\n").trim():""}function st(n,e,t){var r=t.replaceAll("\n"," ").replaceAll('"',"'");return'\nUse `playwright-cli` skill to take a screenshot of "'.concat(r,'" by navigating from ').concat(n,' to "').concat(e,'" page.\n\nFollow this workflow:\n1. Open the initial page at ').concat(n,".\n2. Navigate from that initial page until you reach the page identified as ").concat(e,'.\n - If code errors, runtime failures, or broken UI flows prevent navigation, investigate the cause in the local codebase, make the smallest practical code fix, and verify that the page can now be reached before continuing.\n - If you cannot fix the errors, report on the errors then stop.\n3. Capture a screenshot that focuses on this target: "').concat(r,'".\n4. Keep the generated image artifact and report the screenshot file path plus a brief description of what was captured. If you had to fix code first, also summarize the fix.\n').trim()}function lt(){return ft.apply(this,arguments)}function ft(){return(ft=g(x().m(function n(){var e,t,r;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ee();case 1:return e=n.v,t=it(e),n.n=2,me();case 2:return r=n.v,n.a(2,"\nSimplify the current ".concat(r?"pull request":"branch",' against its base branch using `git diff "$(').concat(t,")\"`.\nFirst, inspect the diff and review the surrounding code for each changed area. This includes nearby functions, types, call sites, tests, configurations, and any other files that help determine if the change is truly necessary.\nLeverage this context to identify redundancies that can be safely removed or simplified. Look for duplicate logic, repeated conditionals, unnecessary abstractions, overlapping code paths, dead code, or edits made obsolete upon understanding the broader context.\n\nPrioritize simplifications that reduce the reviewer's burden, such as:\n- Removing redundant edits or dead code.\n- Eliminating or merging duplicated logic discovered by comparing the diff with related code.\n- Flattening unnecessarily complex logic introduced in the diff (e.g., using early returns to reduce nesting, simplifying boolean expressions, or removing redundant wrapper functions).\n\nCommit and push your changes. Afterward, summarize the redundancies or unnecessary complexity you have removed.\n\n").concat(r?"Current pull request context:\n~~~~yaml\n".concat(r.trim(),"\n~~~~"):"","\n").trim())}},n)}))).apply(this,arguments)}function pt(){return dt.apply(this,arguments)}function dt(){return(dt=g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,q(["bunx","skills@latest","add",p(new URL("../..",import.meta.url)),"--global","--yes","--skill","*","--agent","claude-code","--agent","codex","--agent","gemini-cli"],{waitMessage:"Installing packaged skills globally."});case 1:return n.a(2)}},n)}))).apply(this,arguments)}var ht=new n;function mt(n){var t=ht.command(n.name).description(n.description).allowExcessArguments(!1);n.argumentName&&t.argument(n.argumentName,n.argumentDescription),t.addOption(new e("--agent <agent>",n.optionDescription).choices(n.choices).makeOptionMandatory()).action(g(x().m(function e(){var t,r,i,a,o,u,c,s,l,f=arguments;return x().w(function(e){for(;;)switch(e.n){case 0:for(t=f.length,r=new Array(t),i=0;i<t;i++)r[i]=f[i];return a=j(r,2),o=a[0],u=a[1],c="string"==typeof o?o:"",s="string"==typeof o?u:o,l=process.stdout,e.n=1,n.run(s.agent,c);case 1:l.write.call(l,e.v);case 2:return e.a(2)}},e)})))}function vt(n,e,t){var r=ht.command(n).description(e).allowExcessArguments(!1);"function"!=typeof t?r.argument(t.argumentName,t.argumentDescription).action(g(x().m(function n(e){var r;return x().w(function(n){for(;;)switch(n.n){case 0:return r=process.stdout,n.n=1,t.run(e);case 1:r.write.call(r,n.v);case 2:return n.a(2)}},n)}))):r.action(g(x().m(function n(){var e;return x().w(function(n){for(;;)switch(n.n){case 0:return e=process.stdout,n.n=1,t();case 1:e.write.call(e,n.v);case 2:return n.a(2)}},n)})))}ht.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),ht.command("install-skills").description("Install all packaged skills globally for Claude Code, Codex, and Gemini CLI").allowExcessArguments(!1).action(g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,pt();case 1:process.stdout.write("Done\n");case 2:return n.a(2)}},n)}))),mt({name:"review",description:"Run review against the current branch with the selected agent",optionDescription:"Use a review agent",choices:["all","codex","claude","gemini"],run:function(n){return"all"===n?J(ot(),{allAgentsLabel:"review agents",mapOutput:function(n,e){if(!function(n){return W.test(n)}(e))return"## ".concat(K(n),"\n\n").concat(e)}}):Q(n,ot())}}),vt("review-codex","Run Codex review against the current branch",function(){return Q("codex",ot())}),vt("review-claude","Run Claude Code review against the current branch",function(){return Q("claude",ot())}),vt("review-gemini","Run Gemini CLI review against the current branch",function(){return Q("gemini",ot())}),mt({name:"plan",description:"Run planning against the specified issue with the selected agent",optionDescription:"Use a planning agent",choices:["all","codex","claude","gemini"],argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n,e){return"all"===n?J(tt(se(e)),{allAgentsLabel:"planning agents"}):Q(n,tt(se(e)))}}),vt("plan-codex","Run Codex planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return Q("codex",tt(se(n)))}}),vt("plan-claude","Run Claude Code planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return Q("claude",tt(se(n)))}}),vt("plan-gemini","Run Gemini CLI planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return Q("gemini",tt(se(n)))}}),ht.command("screenshot").description("Take a screenshot with the selected agent via playwright-cli").argument("<initial-url>","Initial URL to open before navigating").argument("<page-name>","Page name to navigate to from the initial page").argument("<description>","Description of the part to capture in the screenshot").addOption(new e("--agent <agent>","Use a screenshot agent").choices(["codex","claude","gemini"]).makeOptionMandatory()).allowExcessArguments(!1).action(g(x().m(function n(e,t,r,i){var a;return x().w(function(n){for(;;)switch(n.n){case 0:return a=process.stdout,n.n=1,Q(i.agent,st(e,t,r));case 1:a.write.call(a,n.v);case 2:return n.a(2)}},n)}))),mt({name:"simplify",description:"Run PR simplification against the current branch with the selected agent",optionDescription:"Use a simplify agent",choices:["codex","claude","gemini"],run:function(n){return Q(n,lt())}}),vt("simplify-codex","Run Codex PR simplification against the current branch",function(){return Q("codex",lt())}),vt("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return Q("claude",lt())}),vt("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return Q("gemini",lt())}),ht.command("open-pr").description("Create a pull request for the current branch").argument("<title>","Pull request title").allowExcessArguments(!1).action(g(x().m(function n(e){var t,r;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,rn();case 1:return t=n.v,n.n=2,Le({body:t||void 0,title:e});case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),ht.command("update-pr").description("Update the current pull request title and body").argument("<title>","Pull request title").allowExcessArguments(!1).action(g(x().m(function n(e){var t,r;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,on("Error: PR body input is required on stdin");case 1:return t=n.v,n.n=2,De({body:t,title:e});case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),ht.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(g(x().m(function n(){var e;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Fn();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),ht.command("fetch-issue").description("Fetch an issue body and timeline messages as YAML").argument("<issue>","GitHub issue number or URL").allowExcessArguments(!1).action(g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,fe(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),ht.command("fetch-pr").description("Fetch a pull request body and timeline messages as YAML, excluding inline comments").argument("[pr]","GitHub pull request number or URL; defaults to the current branch pull request").allowExcessArguments(!1).action(g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,de(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),ht.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(g(x().m(function n(){var e;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ke();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),ht.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Fe();case 1:return e=n.v,n.n=2,Ve(e);case 2:t=n.v,process.stdout.write(t);case 3:return n.a(2)}},n)}))),await ht.parseAsync(process.argv);
|
|
5
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy95YW1sLnRzIiwiLi4vc3JjL3ByL3NoYXJlZC50cyIsIi4uL3NyYy9wci9jaS50cyIsIi4uL3NyYy9yZXBvL2RlZmF1bHRCcmFuY2gudHMiLCIuLi9zcmMvcHIvbWVzc2FnZXMudHMiLCIuLi9zcmMvcHIvcHVsbFJlcXVlc3QudHMiLCIuLi9zcmMvcHIvcmV2aWV3VGhyZWFkcy50cyIsIi4uL3NyYy9wcm9tcHRzL3BsYW5Qcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9iYXNlQnJhbmNoRGlmZkNvbW1hbmQudHMiLCIuLi9zcmMvcHJvbXB0cy9yZXZpZXdQcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9zY3JlZW5zaG90UHJvbXB0LnRzIiwiLi4vc3JjL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQudHMiLCIuLi9zcmMvc2tpbGxzL2luc3RhbGxTa2lsbHMudHMiLCIuLi9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbnR5cGUgUnVuQ29tbWFuZE9wdGlvbnMgPSB7XG4gIGxvZ0ZpbGVQYXRoPzogc3RyaW5nO1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIHdhaXRNZXNzYWdlPzogc3RyaW5nIHwgZmFsc2U7XG4gIHdhaXRJbnRlcnZhbFNlY29uZHM/OiBudW1iZXI7XG59O1xuXG50eXBlIFByb2dyZXNzV3JpdGVyID0gKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIEtpbGxhYmxlUHJvY2VzcyA9IHsga2lsbDogKHNpZ25hbD86IE5vZGVKUy5TaWduYWxzKSA9PiBib29sZWFuOyBwaWQ/OiBudW1iZXIgfTtcblxuLy8gVGhlIG9uZS1ob3VyIGJ1ZGdldCBrZWVwcyBhZ2VudHMgd2FpdGluZyBmb3IgbG9uZy1ydW5uaW5nIGNvbW1hbmRzIHdpdGhvdXQgcmVxdWlyaW5nIHRoZSBwcm9jZXNzIHRvIHVzZSB0aGUgZnVsbCBob3VyLlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTID0gMzY7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QUk9DRVNTX1RJTUVPVVRfTVMgPSA2MCAqIDYwICogMTAwMDtcbmNvbnN0IERPVFNfUEVSX1BST0dSRVNTX1BFUkNFTlRfU1RFUCA9IDU7XG5jb25zdCBGT1JDRV9LSUxMX1RJTUVPVVRfTVMgPSA1MDAwO1xuY29uc3QgTUFYX1BST0dSRVNTX1BFUkNFTlQgPSAxMDA7XG5jb25zdCBQUk9DRVNTX0NMRUFOVVBfU0lHTkFMUyA9IFsnU0lHSU5UJywgJ1NJR1RFUk0nLCAnU0lHSFVQJ10gYXMgY29uc3Q7XG5jb25zdCBhY3RpdmVQcm9jZXNzZXMgPSBuZXcgU2V0PEtpbGxhYmxlUHJvY2Vzcz4oKTtcbmxldCBjbGVhbnVwSGFuZGxlcnNJbnN0YWxsZWQgPSBmYWxzZTtcbi8vIEtlZXAgdGhlIENMSSB0ZXh0IGNvbmNpc2Ugc28gZG93bnN0cmVhbSBwcm9tcHRzIGNhbiBtYXRjaCBpdCBjb25zaXN0ZW50bHkuXG5leHBvcnQgY29uc3QgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HID0gJ1RoaXMgY2FuIHRha2UgdXAgdG8gMSBob3VyOyBkb3RzIGluZGljYXRlIHByb2dyZXNzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIGRldGFjaGVkOiB0cnVlLFxuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgfSk7XG4gIGNvbnN0IHByb2Nlc3NUaW1lb3V0ID0gY3JlYXRlUHJvY2Vzc1RpbWVvdXQocHJvYywgb3B0aW9ucy50aW1lb3V0TXMpO1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKG9wdGlvbnMud2FpdE1lc3NhZ2UsIG9wdGlvbnMud2FpdEludGVydmFsU2Vjb25kcyk7XG4gIGNvbnN0IGNvbW1hbmRMb2dnZXIgPSBhd2FpdCBjcmVhdGVDb21tYW5kTG9nZ2VyKG9wdGlvbnMubG9nRmlsZVBhdGgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQsIChjaHVuaykgPT4gY29tbWFuZExvZ2dlci53cml0ZShjaHVuaykpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyLCAoY2h1bmspID0+IGNvbW1hbmRMb2dnZXIud3JpdGUoY2h1bmspKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG5cbiAgICBpZiAocHJvY2Vzc1RpbWVvdXQudGltZWRPdXQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRpbWVvdXRFcnJvck1lc3NhZ2UoYCR7c3Rkb3V0fSR7c3RkZXJyfWAsIHByb2Nlc3NUaW1lb3V0LnRpbWVvdXRNcywgY29tbWFuZCkpO1xuICAgIH1cblxuICAgIGlmIChleGl0Q29kZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHN0ZG91dDtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcbiAgICB0aHJvdyBuZXcgRXJyb3Iob3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBjb21tYW5kTG9nZ2VyLmNsb3NlKCk7XG4gICAgcHJvY2Vzc1RpbWVvdXQuY2xlYXIoKTtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVvdXRFcnJvck1lc3NhZ2Uob3V0cHV0OiBzdHJpbmcsIHRpbWVvdXRNczogbnVtYmVyLCBjb21tYW5kOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBgQ29tbWFuZCB0aW1lZCBvdXQgYWZ0ZXIgJHtmb3JtYXREdXJhdGlvbih0aW1lb3V0TXMpfTogJHtjb21tYW5kLmpvaW4oJyAnKX1gO1xuICByZXR1cm4gb3V0cHV0Lmxlbmd0aCA+IDAgPyBgJHtvdXRwdXR9XFxuJHttZXNzYWdlfWAgOiBtZXNzYWdlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RHVyYXRpb24obWlsbGlzZWNvbmRzOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAobWlsbGlzZWNvbmRzICUgKDYwICogNjAgKiAxMDAwKSA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAoNjAgKiA2MCAqIDEwMDApfWhgO1xuICB9XG4gIGlmIChtaWxsaXNlY29uZHMgJSAoNjAgKiAxMDAwKSA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAoNjAgKiAxMDAwKX1tYDtcbiAgfVxuICBpZiAobWlsbGlzZWNvbmRzICUgMTAwMCA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAxMDAwfXNgO1xuICB9XG4gIHJldHVybiBgJHttaWxsaXNlY29uZHN9bXNgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvY2Vzc1RpbWVvdXQoXG4gIHByb2M6IEtpbGxhYmxlUHJvY2VzcyxcbiAgdGltZW91dE1zID0gREVGQVVMVF9QUk9DRVNTX1RJTUVPVVRfTVNcbik6IHsgY2xlYXI6ICgpID0+IHZvaWQ7IHRpbWVkT3V0OiAoKSA9PiBib29sZWFuOyB0aW1lb3V0TXM6IG51bWJlciB9IHtcbiAgbGV0IHRpbWVkT3V0ID0gZmFsc2U7XG4gIGxldCBmb3JjZUtpbGxUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG4gIGFjdGl2ZVByb2Nlc3Nlcy5hZGQocHJvYyk7XG4gIGluc3RhbGxDbGVhbnVwSGFuZGxlcnMoKTtcbiAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHRpbWVkT3V0ID0gdHJ1ZTtcbiAgICBraWxsUHJvY2Vzcyhwcm9jLCAnU0lHVEVSTScpO1xuICAgIGZvcmNlS2lsbFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBraWxsUHJvY2Vzcyhwcm9jLCAnU0lHS0lMTCcpLCBGT1JDRV9LSUxMX1RJTUVPVVRfTVMpO1xuICAgIGZvcmNlS2lsbFRpbWVyLnVucmVmKCk7XG4gIH0sIHRpbWVvdXRNcyk7XG4gIHRpbWVvdXQudW5yZWYoKTtcblxuICByZXR1cm4ge1xuICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBpZiAoZm9yY2VLaWxsVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGZvcmNlS2lsbFRpbWVyKTtcbiAgICAgIH1cbiAgICAgIGFjdGl2ZVByb2Nlc3Nlcy5kZWxldGUocHJvYyk7XG4gICAgfSxcbiAgICB0aW1lZE91dDogKCkgPT4gdGltZWRPdXQsXG4gICAgdGltZW91dE1zLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsQ2xlYW51cEhhbmRsZXJzKCk6IHZvaWQge1xuICBpZiAoY2xlYW51cEhhbmRsZXJzSW5zdGFsbGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNsZWFudXBIYW5kbGVyc0luc3RhbGxlZCA9IHRydWU7XG5cbiAgZm9yIChjb25zdCBzaWduYWwgb2YgUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMpIHtcbiAgICBwcm9jZXNzLm9uY2Uoc2lnbmFsLCAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHByb2Mgb2YgYWN0aXZlUHJvY2Vzc2VzKSB7XG4gICAgICAgIGtpbGxQcm9jZXNzKHByb2MsIHNpZ25hbCk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLmV4aXQoMTI4ICsgc2lnbmFsTnVtYmVyKHNpZ25hbCkpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNpZ25hbE51bWJlcihzaWduYWw6ICh0eXBlb2YgUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMpW251bWJlcl0pOiBudW1iZXIge1xuICBzd2l0Y2ggKHNpZ25hbCkge1xuICAgIGNhc2UgJ1NJR0lOVCc6XG4gICAgICByZXR1cm4gMjtcbiAgICBjYXNlICdTSUdURVJNJzpcbiAgICAgIHJldHVybiAxNTtcbiAgICBjYXNlICdTSUdIVVAnOlxuICAgICAgcmV0dXJuIDE7XG4gIH1cbn1cblxuZnVuY3Rpb24ga2lsbFByb2Nlc3MocHJvYzogS2lsbGFibGVQcm9jZXNzLCBzaWduYWw6IE5vZGVKUy5TaWduYWxzKTogdm9pZCB7XG4gIGlmIChwcm9jLnBpZCAmJiBwcm9jLnBpZCA+IDApIHtcbiAgICB0cnkge1xuICAgICAgcHJvY2Vzcy5raWxsKC1wcm9jLnBpZCwgc2lnbmFsKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEZhbGwgYmFjayB0byBraWxsaW5nIHRoZSBkaXJlY3QgY2hpbGQgd2hlbiBwcm9jZXNzLWdyb3VwIHRlcm1pbmF0aW9uIGlzIHVuYXZhaWxhYmxlLlxuICAgIH1cbiAgfVxuICBwcm9jLmtpbGwoc2lnbmFsKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvVGV4dChcbiAgc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBvbkNodW5rPzogKGNodW5rOiBzdHJpbmcpID0+IHZvaWRcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgY29uc3QgY2h1bmtUZXh0ID0gdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyA/IGNodW5rIDogZGVjb2Rlci5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoY2h1bmspLCB7IHN0cmVhbTogdHJ1ZSB9KTtcbiAgICBjaHVua3MucHVzaChjaHVua1RleHQpO1xuICAgIG9uQ2h1bms/LihjaHVua1RleHQpO1xuICB9XG4gIGNvbnN0IGZpbmFsQ2h1bmsgPSBkZWNvZGVyLmRlY29kZSgpO1xuICBpZiAoZmluYWxDaHVuaykge1xuICAgIGNodW5rcy5wdXNoKGZpbmFsQ2h1bmspO1xuICAgIG9uQ2h1bms/LihmaW5hbENodW5rKTtcbiAgfVxuICByZXR1cm4gY2h1bmtzLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2FpdFByb2dyZXNzKFxuICB3YWl0TWVzc2FnZTogc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQsXG4gIHdhaXRJbnRlcnZhbFNlY29uZHMgPSBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyxcbiAgd3JpdGVQcm9ncmVzczogUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZSkgPT4gcHJvY2Vzcy5zdGRlcnIud3JpdGUobWVzc2FnZSlcbik6ICgpID0+IHZvaWQge1xuICBpZiAoIXdhaXRNZXNzYWdlKSB7XG4gICAgcmV0dXJuICgpID0+IHt9O1xuICB9XG5cbiAgbGV0IGRvdENvdW50ID0gMDtcbiAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgd3JpdGVQcm9ncmVzcygnLicpO1xuICAgIGRvdENvdW50ICs9IDE7XG4gICAgaWYgKGRvdENvdW50IDw9IE1BWF9QUk9HUkVTU19QRVJDRU5UICYmIGRvdENvdW50ICUgRE9UU19QRVJfUFJPR1JFU1NfUEVSQ0VOVF9TVEVQID09PSAwKSB7XG4gICAgICAvLyBUaGlzIHRyYWNrcyBlbGFwc2VkIHdhaXQgYnVkZ2V0LCBub3QgdGhlIGNoaWxkIHByb2Nlc3MgY29tcGxldGlvbiBwZXJjZW50YWdlLlxuICAgICAgd3JpdGVQcm9ncmVzcyhgICR7ZG90Q291bnR9JSBkb25lIGApO1xuICAgIH1cbiAgfSwgd2FpdEludGVydmFsU2Vjb25kcyAqIDEwMDApO1xuXG4gIHdyaXRlUHJvZ3Jlc3MoYCR7d2FpdE1lc3NhZ2V9ICR7V0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HfTogYCk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICB3cml0ZVByb2dyZXNzKCdcXG4nKTtcbiAgfTtcbn1cblxudHlwZSBDb21tYW5kTG9nZ2VyID0ge1xuICB3cml0ZTogKGNodW5rOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNsb3NlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ29tbWFuZExvZ2dlcihsb2dGaWxlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxDb21tYW5kTG9nZ2VyPiB7XG4gIGlmICghbG9nRmlsZVBhdGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6ICgpID0+IHt9LFxuICAgICAgY2xvc2U6IGFzeW5jICgpID0+IHt9LFxuICAgIH07XG4gIH1cblxuICBjb25zdCB3YXJuID0gKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYFdhcm5pbmc6IEZhaWxlZCB0byB3cml0ZSBjb21tYW5kIGxvZyB0byAke2xvZ0ZpbGVQYXRofTogJHtTdHJpbmcoZXJyb3IpfVxcbmApO1xuICB9O1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgbWtkaXIoZGlybmFtZShsb2dGaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGNvbnN0IHN0cmVhbSA9IGNyZWF0ZVdyaXRlU3RyZWFtKGxvZ0ZpbGVQYXRoLCB7IGZsYWdzOiAndycgfSk7XG5cbiAgICBzdHJlYW0ub24oJ2Vycm9yJywgd2Fybik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6IChjaHVuaykgPT4ge1xuICAgICAgICBpZiAoc3RyZWFtLndyaXRhYmxlKSB7XG4gICAgICAgICAgc3RyZWFtLndyaXRlKGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PlxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIHN0cmVhbS5lbmQoKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgfSksXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB3YXJuKGVycm9yKTtcbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6ICgpID0+IHt9LFxuICAgICAgY2xvc2U6IGFzeW5jICgpID0+IHt9LFxuICAgIH07XG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBOT19DT05DRVJOX1BIUkFTRSA9ICd0aGVyZSBpcyBubyBjb25jZXJuJztcbmV4cG9ydCBjb25zdCBOT19DT05DRVJOX01FU1NBR0UgPSAnVGhlcmUgaXMgbm8gY29uY2Vybi4nO1xuIiwiaW1wb3J0IHsgY3JlYXRlV2FpdFByb2dyZXNzLCBydW5Db21tYW5kV2l0aFByb2dyZXNzIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSwgTk9fQ09OQ0VSTl9QSFJBU0UgfSBmcm9tICcuLi9yZXZpZXcvbm9Db25jZXJuLmpzJztcblxuZXhwb3J0IGNvbnN0IEFHRU5UX05BTUVTID0gWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10gYXMgY29uc3Q7XG5jb25zdCBDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYID0gbmV3IFJlZ0V4cChgXFxcXGIke05PX0NPTkNFUk5fUEhSQVNFfVxcXFxiYCwgJ2knKTtcbmV4cG9ydCB0eXBlIEFnZW50TmFtZSA9ICh0eXBlb2YgQUdFTlRfTkFNRVMpW251bWJlcl07XG5cbnR5cGUgQWdlbnRDb21tYW5kT3B0aW9ucyA9IHtcbiAgd2FpdE1lc3NhZ2U/OiBzdHJpbmcgfCBmYWxzZTtcbn07XG5cbnR5cGUgQWxsQWdlbnRDb21tYW5kT3B0aW9ucyA9IHtcbiAgYWxsQWdlbnRzTGFiZWw6IHN0cmluZztcbiAgbWFwT3V0cHV0PzogKGFnZW50OiBBZ2VudE5hbWUsIG91dHB1dDogc3RyaW5nKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQWxsQWdlbnRDb21tYW5kcyhcbiAgcHJvbXB0OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4sXG4gIG9wdGlvbnM6IEFsbEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7IGFsbEFnZW50c0xhYmVsOiAnYWdlbnRzJyB9XG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNvbHZlZFByb21wdCA9IGF3YWl0IHByb21wdDtcbiAgY29uc3Qgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyh3YWl0TWVzc2FnZUZvcihvcHRpb25zLmFsbEFnZW50c0xhYmVsKSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBvdXRwdXRzID0gKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIEFHRU5UX05BTUVTLm1hcChhc3luYyAoYWdlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSAoXG4gICAgICAgICAgICBhd2FpdCBydW5BZ2VudENvbW1hbmQoYWdlbnQsIHJlc29sdmVkUHJvbXB0LCB7XG4gICAgICAgICAgICAgIHdhaXRNZXNzYWdlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKS50cmltKCk7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbnMubWFwT3V0cHV0Py4oYWdlbnQsIG91dHB1dCkgPz8gYCMjICR7ZGlzcGxheUFnZW50TmFtZShhZ2VudCl9XFxuXFxuJHtvdXRwdXR9YDtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApLmZpbHRlcigob3V0cHV0KTogb3V0cHV0IGlzIHN0cmluZyA9PiBvdXRwdXQgIT09IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG91dHB1dHMubGVuZ3RoID4gMCA/IG91dHB1dHMuam9pbignXFxuXFxuJykgOiBOT19DT05DRVJOX01FU1NBR0U7XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BZ2VudENvbW1hbmQoXG4gIGFnZW50OiBBZ2VudE5hbWUsXG4gIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+LFxuICBvcHRpb25zOiBBZ2VudENvbW1hbmRPcHRpb25zID0ge31cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudCwgYXdhaXQgcHJvbXB0KSwge1xuICAgIGxvZ0ZpbGVQYXRoOiBhZ2VudExvZ0ZpbGVQYXRoKGFnZW50KSxcbiAgICB3YWl0TWVzc2FnZTogb3B0aW9ucy53YWl0TWVzc2FnZSA9PT0gdW5kZWZpbmVkID8gd2FpdE1lc3NhZ2VGb3IoZGlzcGxheUFnZW50TmFtZShhZ2VudCkpIDogb3B0aW9ucy53YWl0TWVzc2FnZSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudDogQWdlbnROYW1lLCBwcm9tcHQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4JzpcbiAgICAgIHJldHVybiBbJ25weCcsICctLXllcycsICdAb3BlbmFpL2NvZGV4QGxhdGVzdCcsICdleGVjJywgJy0tZGFuZ2Vyb3VzbHktYnlwYXNzLWFwcHJvdmFscy1hbmQtc2FuZGJveCcsIHByb21wdF07XG4gICAgY2FzZSAnY2xhdWRlJzpcbiAgICAgIHJldHVybiBbJ2NsYXVkZScsICctLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnMnLCAnLXAnLCBwcm9tcHRdO1xuICAgIGNhc2UgJ2dlbWluaSc6XG4gICAgICByZXR1cm4gW1xuICAgICAgICAnbnB4JyxcbiAgICAgICAgJy0teWVzJyxcbiAgICAgICAgJ0Bnb29nbGUvZ2VtaW5pLWNsaUBwcmV2aWV3JyxcbiAgICAgICAgJy0tYXBwcm92YWwtbW9kZScsXG4gICAgICAgICd5b2xvJyxcbiAgICAgICAgJy0tbW9kZWwnLFxuICAgICAgICAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldycsXG4gICAgICAgICctcCcsXG4gICAgICAgIHByb21wdCxcbiAgICAgIF07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BsYXlBZ2VudE5hbWUoYWdlbnQ6IEFnZW50TmFtZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAoYWdlbnQpIHtcbiAgICBjYXNlICdjb2RleCc6XG4gICAgICByZXR1cm4gJ0NvZGV4JztcbiAgICBjYXNlICdjbGF1ZGUnOlxuICAgICAgcmV0dXJuICdDbGF1ZGUgQ29kZSc7XG4gICAgY2FzZSAnZ2VtaW5pJzpcbiAgICAgIHJldHVybiAnR2VtaW5pIENMSSc7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2Uob3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIENPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVgudGVzdChvdXRwdXQpO1xufVxuXG5mdW5jdGlvbiB3YWl0TWVzc2FnZUZvcih0YXJnZXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgV2FpdGluZyBmb3IgJHt0YXJnZXR9IHRvIGZpbmlzaC5gO1xufVxuXG5mdW5jdGlvbiBhZ2VudExvZ0ZpbGVQYXRoKGFnZW50OiBBZ2VudE5hbWUpOiBzdHJpbmcge1xuICByZXR1cm4gYGxvZ3MvJHthZ2VudH0tJHt0aW1lc3RhbXBGb3JMb2dGaWxlKCl9LmxvZ2A7XG59XG5cbmZ1bmN0aW9uIHRpbWVzdGFtcEZvckxvZ0ZpbGUoKTogc3RyaW5nIHtcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgY29uc3QgW21vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kXSA9IFtcbiAgICBub3cuZ2V0TW9udGgoKSArIDEsXG4gICAgbm93LmdldERhdGUoKSxcbiAgICBub3cuZ2V0SG91cnMoKSxcbiAgICBub3cuZ2V0TWludXRlcygpLFxuICAgIG5vdy5nZXRTZWNvbmRzKCksXG4gIF0ubWFwKHR3b0RpZ2l0cyk7XG4gIHJldHVybiBgJHttb250aH0ke2RheX0tJHtob3VyfSR7bWludXRlfSR7c2Vjb25kfWA7XG59XG5cbmZ1bmN0aW9uIHR3b0RpZ2l0cyh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbn1cbiIsIi8qKlxuICogYGJsb2NrUXVvdGU6ICdsaXRlcmFsJ2A6IFVzZXMgYSBwaXBlIChgcHJvcDogfGApIHRvIHJlcHJlc2VudCBtdWx0aWxpbmUgc3RyaW5ncy5cbiAqIGBsaW5lV2lkdGg6IDBgOiBEaXNhYmxlcyBsaW5lIHdyYXBwaW5nLlxuICovXG5leHBvcnQgY29uc3QgeWFtbFN0cmluZ2lmeU9wdGlvbnMgPSB7IGJsb2NrUXVvdGU6ICdsaXRlcmFsJywgbGluZVdpZHRoOiAwIH0gYXMgY29uc3Q7XG4iLCJpbXBvcnQgeyBzcGF3biwgc3Bhd25TeW5jIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHN0ZGVyciBhcyBwcm9jZXNzU3RkZXJyLCBzdGRpbiBhcyBwcm9jZXNzU3RkaW4gfSBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgc2V0VGltZW91dCBhcyBzbGVlcCB9IGZyb20gJ25vZGU6dGltZXJzL3Byb21pc2VzJztcbmltcG9ydCB7IHN0cmluZ2lmeSBhcyBzdHJpbmdpZnlZYW1sIH0gZnJvbSAneWFtbCc7XG5pbXBvcnQgeyBjcmVhdGVQcm9jZXNzVGltZW91dCwgc3RyZWFtVG9UZXh0LCB0aW1lb3V0RXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IHlhbWxTdHJpbmdpZnlPcHRpb25zIH0gZnJvbSAnLi4veWFtbC5qcyc7XG5cbmV4cG9ydCB0eXBlIEpzb25PYmplY3QgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgdHlwZSBNZXRhZGF0YU5vZGUgPSB7XG4gIG51bWJlcjogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgUGFnZUluZm8gPSB7XG4gIGhhc05leHRQYWdlOiBib29sZWFuO1xuICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZUNvbm5lY3Rpb248VE5vZGU+ID0ge1xuICBub2RlczogVE5vZGVbXTtcbiAgcGFnZUluZm86IFBhZ2VJbmZvO1xufTtcblxudHlwZSBSdW5Db21tYW5kT3B0aW9ucyA9IHtcbiAgc3RkaW5EYXRhPzogc3RyaW5nO1xuICBhbGxvd2VkRXhpdENvZGVzPzogbnVtYmVyW107XG59O1xuXG5jb25zdCBHSF9SRVRSWV9NQVhfQVRURU1QVFMgPSAzO1xuY29uc3QgR0hfUkVUUllfQkFTRV9ERUxBWV9NUyA9IDEwMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9ncmVzcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhpdFdpdGhFcnJvcihtZXNzYWdlOiBzdHJpbmcsIGNvZGUgPSAxKTogbmV2ZXIge1xuICBwcm9jZXNzU3RkZXJyLndyaXRlKGAke21lc3NhZ2V9XFxuYCk7XG4gIHByb2Nlc3MuZXhpdChjb2RlKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRTdGRpblRleHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKHByb2Nlc3NTdGRpbi5pc1RUWSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gYXdhaXQgc3RyZWFtVG9UZXh0KHByb2Nlc3NTdGRpbik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUmVxdWlyZWRTdGRpblRleHQoZXJyb3JNZXNzYWdlID0gJ0Vycm9yOiBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRTdGRpblRleHQoKTtcbiAgaWYgKGlucHV0Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cbiAgZXhpdFdpdGhFcnJvcihlcnJvck1lc3NhZ2UsIDIpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQ29tbWFuZChjb21tYW5kOiBzdHJpbmdbXSwgb3B0aW9uczogUnVuQ29tbWFuZE9wdGlvbnMgPSB7fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGFsbG93ZWRFeGl0Q29kZXMgPSBvcHRpb25zLmFsbG93ZWRFeGl0Q29kZXMgPz8gW107XG5cbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gR0hfUkVUUllfTUFYX0FUVEVNUFRTOyBhdHRlbXB0ICs9IDEpIHtcbiAgICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgICAgZGV0YWNoZWQ6IHRydWUsXG4gICAgICBzdGRpbzogWydwaXBlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgIH0pO1xuICAgIGxldCBmYWlsdXJlTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxldCByZXRyeSA9IGZhbHNlO1xuICAgIGNvbnN0IHByb2Nlc3NUaW1lb3V0ID0gY3JlYXRlUHJvY2Vzc1RpbWVvdXQocHJvYyk7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChvcHRpb25zLnN0ZGluRGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb2Muc3RkaW4uZW5kKG9wdGlvbnMuc3RkaW5EYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Muc3RkaW4uZW5kKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFtzdGRvdXQsIHN0ZGVyciwgZXhpdENvZGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQpLFxuICAgICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRlcnIpLFxuICAgICAgICBuZXcgUHJvbWlzZTxudW1iZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgICBwcm9jLm9uY2UoJ2Nsb3NlJywgKGNvZGUpID0+IHJlc29sdmUoY29kZSA/PyAxKSk7XG4gICAgICAgIH0pLFxuICAgICAgXSk7XG4gICAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcblxuICAgICAgaWYgKHByb2Nlc3NUaW1lb3V0LnRpbWVkT3V0KCkpIHtcbiAgICAgICAgZmFpbHVyZU1lc3NhZ2UgPSB0aW1lb3V0RXJyb3JNZXNzYWdlKG91dHB1dCwgcHJvY2Vzc1RpbWVvdXQudGltZW91dE1zLCBjb21tYW5kKTtcbiAgICAgIH0gZWxzZSBpZiAoZXhpdENvZGUgPT09IDAgfHwgYWxsb3dlZEV4aXRDb2Rlcy5pbmNsdWRlcyhleGl0Q29kZSkpIHtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgIH0gZWxzZSBpZiAoaXNUcmFuc2llbnRHaEZhaWx1cmUoY29tbWFuZCwgZXhpdENvZGUsIG91dHB1dCkgJiYgYXR0ZW1wdCA8IEdIX1JFVFJZX01BWF9BVFRFTVBUUykge1xuICAgICAgICByZXRyeSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG91dHB1dCB8fCBgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZC5qb2luKCcgJyl9YDtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgcHJvY2Vzc1RpbWVvdXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAocmV0cnkpIHtcbiAgICAgIHByb2dyZXNzKGBUcmFuc2llbnQgR2l0SHViIENMSSBmYWlsdXJlOyByZXRyeWluZy4uLiAoYXR0ZW1wdCAke2F0dGVtcHR9IG9mICR7R0hfUkVUUllfTUFYX0FUVEVNUFRTIC0gMX0pYCk7XG4gICAgICBhd2FpdCBzbGVlcChHSF9SRVRSWV9CQVNFX0RFTEFZX01TICogYXR0ZW1wdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGZhaWx1cmVNZXNzYWdlKSB7XG4gICAgICBleGl0V2l0aEVycm9yKGZhaWx1cmVNZXNzYWdlKTtcbiAgICB9XG4gIH1cbiAgZXhpdFdpdGhFcnJvcihgQ29tbWFuZCBmYWlsZWQgYWZ0ZXIgJHtHSF9SRVRSWV9NQVhfQVRURU1QVFN9IGF0dGVtcHRzOiAke2NvbW1hbmQuam9pbignICcpfWApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2goYXJnczogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBydW5Db21tYW5kKFsnZ2gnLCAuLi5hcmdzXSwgeyBzdGRpbkRhdGEgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaEFsbG93RXhpdENvZGVzKFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgYWxsb3dlZEV4aXRDb2RlczogbnVtYmVyW10sXG4gIHN0ZGluRGF0YT86IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoWydnaCcsIC4uLmFyZ3NdLCB7IHN0ZGluRGF0YSwgYWxsb3dlZEV4aXRDb2RlcyB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRSZXBvUGFydHMoKTogUHJvbWlzZTxbc3RyaW5nLCBzdHJpbmddPiB7XG4gIGNvbnN0IG5hbWVXaXRoT3duZXIgPSAoYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ25hbWVXaXRoT3duZXInLCAnLS1qcScsICcubmFtZVdpdGhPd25lciddKSkudHJpbSgpO1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gbmFtZVdpdGhPd25lci5zcGxpdCgnLycsIDIpO1xuICBpZiAoIW93bmVyIHx8ICFuYW1lKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCByZXBvc2l0b3J5Jyk7XG4gIH1cbiAgcmV0dXJuIFtvd25lciwgbmFtZV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50UHJOdW1iZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIChhd2FpdCBnaChbJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ251bWJlcicsICctLWpxJywgJy5udW1iZXInXSkpLnRyaW0oKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdyYXBocWw8VCBleHRlbmRzIEpzb25PYmplY3Q+KFxuICBxdWVyeTogc3RyaW5nLFxuICB2YXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQ+ID0ge31cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBhcmdzID0gWydhcGknLCAnZ3JhcGhxbCcsICctRicsICdxdWVyeT1ALSddO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YXJzKSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLUYnLCBgJHtrZXl9PSR7dmFsdWV9YCk7XG4gIH1cblxuICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoYXdhaXQgZ2goYXJncywgcXVlcnkpKSBhcyBKc29uT2JqZWN0ICYgeyBlcnJvcnM/OiBBcnJheTx7IG1lc3NhZ2U/OiBzdHJpbmcgfT4gfTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UgYXMgVDtcbiAgfVxuXG4gIGNvbnN0IGVycm9yTWVzc2FnZXMgPSByZXNwb25zZS5lcnJvcnMubWFwKChlcnJvcikgPT4gZXJyb3IubWVzc2FnZSA/PyAnVW5rbm93biBHcmFwaFFMIGVycm9yJykuam9pbignXFxuJyk7XG4gIGV4aXRXaXRoRXJyb3IoYEdyYXBoUUwgQVBJIGVycm9yOlxcbiR7ZXJyb3JNZXNzYWdlc31gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHlhbWxEdW1wKGRhdGE6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5naWZ5WWFtbChkYXRhLCB5YW1sU3RyaW5naWZ5T3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ29weTxUPihkYXRhOiBUKTogVCB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKSBhcyBUO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZEF2YWlsYWJsZShjb21tYW5kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNwYXduU3luY1NhZmUoW2NvbW1hbmQsICctLXZlcnNpb24nXSkuZXhpdENvZGUgPT09IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGF3blN5bmNTYWZlKGNvbW1hbmQ6IHN0cmluZ1tdLCBzdGRpbkRhdGE/OiBzdHJpbmcpOiB7IGV4aXRDb2RlOiBudW1iZXI7IG91dHB1dDogc3RyaW5nIH0ge1xuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgaW5wdXQ6IHN0ZGluRGF0YSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBleGl0Q29kZTogcmVzdWx0LnN0YXR1cyA/PyAocmVzdWx0LmVycm9yID8gMSA6IDApLFxuICAgIG91dHB1dDogYCR7cmVzdWx0LnN0ZG91dCA/PyAnJ30ke3Jlc3VsdC5zdGRlcnIgPz8gJyd9YCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNUcmFuc2llbnRHaEZhaWx1cmUoY29tbWFuZDogc3RyaW5nW10sIGV4aXRDb2RlOiBudW1iZXIsIG91dHB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChjb21tYW5kWzBdICE9PSAnZ2gnIHx8IGV4aXRDb2RlID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIC8oSFRUUCA1MFswMjM0XVxcYnxXZSBoYWQgaXNzdWVzIHByb2R1Y2luZyB0aGUgcmVzcG9uc2UgdG8geW91ciByZXF1ZXN0KS9pLnRlc3Qob3V0cHV0KTtcbn1cbiIsImltcG9ydCB7IHN0ZGVyciBhcyBwcm9jZXNzU3RkZXJyIH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7IHNldFRpbWVvdXQgYXMgc2xlZXAgfSBmcm9tICdub2RlOnRpbWVycy9wcm9taXNlcyc7XG5pbXBvcnQgeyBzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgY3JlYXRlV2FpdFByb2dyZXNzLCBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5pbXBvcnQge1xuICBjb21tYW5kQXZhaWxhYmxlLFxuICBjdXJyZW50UHJOdW1iZXIsXG4gIGRlZXBDb3B5LFxuICBleGl0V2l0aEVycm9yLFxuICBnaEFsbG93RXhpdENvZGVzLFxuICBwcm9ncmVzcyxcbiAgc3Bhd25TeW5jU2FmZSxcbiAgeWFtbER1bXAsXG59IGZyb20gJy4vc2hhcmVkLmpzJztcblxuZXhwb3J0IGNvbnN0IFRFU1RfUkVMQVRFRF9QQVRURVJOID0gL1xcYnRlc3RcXGIvaTtcbmV4cG9ydCBjb25zdCBURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyA9IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTO1xuLy8gT25lIGh1bmRyZWQgMzYtc2Vjb25kIGNoZWNrcyBwcmVzZXJ2ZXMgdGhlIG1heGltdW0gb25lLWhvdXIgQ0kgd2FpdCBidWRnZXQuXG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUyA9IDEwMDtcbmNvbnN0IFRFU1RfQ0hFQ0tfV0FJVF9NRVNTQUdFID0gJ1dhaXRpbmcgZm9yIHRlc3QtcmVsYXRlZCB3b3JrZmxvd3MgdG8gZmluaXNoLic7XG5leHBvcnQgY29uc3QgWkVST19USU1FU1RBTVAgPSAnMDAwMS0wMS0wMVQwMDowMDowMFonO1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyA9IFtcbiAgJ2F0dGVtcHQnLFxuICAnY29uY2x1c2lvbicsXG4gICdjcmVhdGVkQXQnLFxuICAnZGF0YWJhc2VJZCcsXG4gICdkaXNwbGF5VGl0bGUnLFxuICAnZXZlbnQnLFxuICAnaGVhZEJyYW5jaCcsXG4gICdoZWFkU2hhJyxcbiAgJ2pvYnMnLFxuICAnbmFtZScsXG4gICdudW1iZXInLFxuICAnc3RhcnRlZEF0JyxcbiAgJ3N0YXR1cycsXG4gICd1cGRhdGVkQXQnLFxuICAndXJsJyxcbiAgJ3dvcmtmbG93TmFtZScsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBDaGVjayA9IHtcbiAgYnVja2V0Pzogc3RyaW5nO1xuICBjb21wbGV0ZWRBdD86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGV2ZW50Pzogc3RyaW5nO1xuICBsaW5rPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBzdGFydGVkQXQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogc3RyaW5nO1xuICB3b3JrZmxvdz86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIENpUmVzdWx0cyA9IHtcbiAgc3VtbWFyeToge1xuICAgIHRvdGFsOiBudW1iZXI7XG4gICAgcGFzczogbnVtYmVyO1xuICAgIGZhaWw6IG51bWJlcjtcbiAgICBwZW5kaW5nOiBudW1iZXI7XG4gICAgc2tpcHBpbmc6IG51bWJlcjtcbiAgICBjYW5jZWw6IG51bWJlcjtcbiAgfTtcbiAgY2hlY2tzOiBDaGVja1tdO1xufTtcblxuZXhwb3J0IHR5cGUgV29ya2Zsb3dDbGFzc2lmaWNhdGlvbiA9ICdmYWlsZWQnIHwgJ3J1bm5pbmcnIHwgJ3N1Y2Nlc3NmdWwnO1xuXG5leHBvcnQgdHlwZSBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQgPSB7XG4gIGNsYXNzaWZpY2F0aW9uOiBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uO1xuICBjaGVjazogQ2hlY2s7XG4gIGNoZWNrczogQ2hlY2tbXTtcbn07XG5cbnR5cGUgQ29tcGFjdFdvcmtmbG93UnVuID0ge1xuICBicmFuY2g/OiBzdHJpbmc7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGZhaWxlZF9zdGVwPzogc3RyaW5nO1xuICBqb2I/OiBzdHJpbmc7XG4gIGpvYl91cmw/OiBzdHJpbmc7XG4gIHJ1bl9pZD86IHN0cmluZztcbiAgcnVuX3VybD86IHN0cmluZztcbiAgc2hhPzogc3RyaW5nO1xuICB3b3JrZmxvdz86IHN0cmluZztcbn07XG5cbnR5cGUgV29ya2Zsb3dSdW5TdGVwID0ge1xuICBjb25jbHVzaW9uPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBudW1iZXI/OiBudW1iZXI7XG4gIHN0YXR1cz86IHN0cmluZztcbn07XG5cbnR5cGUgV29ya2Zsb3dSdW5Kb2IgPSB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGRhdGFiYXNlSWQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0YXR1cz86IHN0cmluZztcbiAgc3RlcHM/OiBXb3JrZmxvd1J1blN0ZXBbXTtcbiAgdXJsPzogc3RyaW5nO1xufTtcblxudHlwZSBXb3JrZmxvd1J1bkRldGFpbHMgPSB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGhlYWRCcmFuY2g/OiBzdHJpbmc7XG4gIGhlYWRTaGE/OiBzdHJpbmc7XG4gIGpvYnM/OiBXb3JrZmxvd1J1bkpvYltdO1xuICB1cmw/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4gPSAvXi4qP1xcdFVOS05PV04gU1RFUFxcdFxcZHs0fS1cXGR7Mn0tXFxkezJ9VFteWl0rWlxccyovO1xuY29uc3QgcnRrQXZhaWxhYmxlID0gY29tbWFuZEF2YWlsYWJsZSgncnRrJyk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsYXRlc3RQckNpUmVzdWx0cyhwck51bWJlcj86IHN0cmluZyk6IFByb21pc2U8Q2lSZXN1bHRzPiB7XG4gIGNvbnN0IGFyZ3MgPSBbJ3ByJywgJ2NoZWNrcyddO1xuICBpZiAocHJOdW1iZXIpIHtcbiAgICBhcmdzLnB1c2gocHJOdW1iZXIpO1xuICB9XG4gIGFyZ3MucHVzaCgnLS1qc29uJywgJ2J1Y2tldCxjb21wbGV0ZWRBdCxkZXNjcmlwdGlvbixldmVudCxsaW5rLG5hbWUsc3RhcnRlZEF0LHN0YXRlLHdvcmtmbG93Jyk7XG5cbiAgbGV0IGNoZWNrczogQ2hlY2tbXSA9IFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoYXJncywgWzhdKTtcbiAgICBjaGVja3MgPSByYXcudHJpbSgpLmxlbmd0aCA+IDAgPyAoSlNPTi5wYXJzZShyYXcpIGFzIENoZWNrW10pIDogW107XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIGNoZWNrcyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdW1tYXJ5ID0gY2hlY2tzLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+PigoY291bnRzLCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IGJ1Y2tldCA9IGNoZWNrLmJ1Y2tldCA/PyAnJztcbiAgICBjb3VudHNbYnVja2V0XSA9IChjb3VudHNbYnVja2V0XSA/PyAwKSArIDE7XG4gICAgcmV0dXJuIGNvdW50cztcbiAgfSwge30pO1xuXG4gIHJldHVybiB7XG4gICAgc3VtbWFyeToge1xuICAgICAgdG90YWw6IGNoZWNrcy5sZW5ndGgsXG4gICAgICBwYXNzOiBzdW1tYXJ5LnBhc3MgPz8gMCxcbiAgICAgIGZhaWw6IHN1bW1hcnkuZmFpbCA/PyAwLFxuICAgICAgcGVuZGluZzogc3VtbWFyeS5wZW5kaW5nID8/IDAsXG4gICAgICBza2lwcGluZzogc3VtbWFyeS5za2lwcGluZyA/PyAwLFxuICAgICAgY2FuY2VsOiBzdW1tYXJ5LmNhbmNlbCA/PyAwLFxuICAgIH0sXG4gICAgY2hlY2tzLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyhcbiAgcHJOdW1iZXI6IHN0cmluZyxcbiAgc2xlZXBGbjogKHNlY29uZHM6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiA9IHNsZWVwU2Vjb25kcyxcbiAgbGF0ZXN0Q2lSZXN1bHRzRm46IChwck51bWJlcj86IHN0cmluZykgPT4gQ2lSZXN1bHRzIHwgUHJvbWlzZTxDaVJlc3VsdHM+ID0gbGF0ZXN0UHJDaVJlc3VsdHMsXG4gIHdyaXRlUHJvZ3Jlc3NGbjogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCA9IChtZXNzYWdlKSA9PiBwcm9jZXNzU3RkZXJyLndyaXRlKG1lc3NhZ2UpXG4pOiBQcm9taXNlPFtDaVJlc3VsdHMsIG51bWJlciwgYm9vbGVhbl0+IHtcbiAgbGV0IGF0dGVtcHRzID0gMDtcbiAgbGV0IGNpUmVzdWx0cyA9IGF3YWl0IGxhdGVzdENpUmVzdWx0c0ZuKHByTnVtYmVyKTtcbiAgbGV0IHN0b3BXYWl0UHJvZ3Jlc3MgPSAoKSA9PiB7fTtcblxuICB0cnkge1xuICAgIGZvciAoOzspIHtcbiAgICAgIGNvbnN0IGNsYXNzaWZpZWRSZXN1bHRzID0gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzKTtcbiAgICAgIGNvbnN0IFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c10gPSBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoY2xhc3NpZmllZFJlc3VsdHMpO1xuXG4gICAgICBpZiAoT2JqZWN0LmtleXMoZmFpbGVkUmVzdWx0cykubGVuZ3RoID4gMCB8fCBPYmplY3Qua2V5cyhydW5uaW5nUmVzdWx0cykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbY2lSZXN1bHRzLCBhdHRlbXB0cywgZmFsc2VdO1xuICAgICAgfVxuICAgICAgaWYgKGF0dGVtcHRzID49IFRFU1RfQ0hFQ0tfV0FJVF9NQVhfQVRURU1QVFMpIHtcbiAgICAgICAgcmV0dXJuIFtjaVJlc3VsdHMsIGF0dGVtcHRzLCB0cnVlXTtcbiAgICAgIH1cblxuICAgICAgYXR0ZW1wdHMgKz0gMTtcbiAgICAgIGlmIChhdHRlbXB0cyA9PT0gMSkge1xuICAgICAgICBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKFxuICAgICAgICAgIFRFU1RfQ0hFQ0tfV0FJVF9NRVNTQUdFLFxuICAgICAgICAgIFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTLFxuICAgICAgICAgIHdyaXRlUHJvZ3Jlc3NGblxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYXdhaXQgc2xlZXBGbihURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyk7XG4gICAgICBjaVJlc3VsdHMgPSBhd2FpdCBsYXRlc3RDaVJlc3VsdHNGbihwck51bWJlcik7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHN0b3BXYWl0UHJvZ3Jlc3MoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzOiBDaVJlc3VsdHMpOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+IHtcbiAgY29uc3QgbGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3cgPSBjaVJlc3VsdHMuY2hlY2tzLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBDaGVja1tdPj4oKGdyb3VwZWRSZXN1bHRzLCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IHdvcmtmbG93S2V5ID0gY2hlY2sud29ya2Zsb3cgfHwgY2hlY2submFtZSB8fCAndW5rbm93bl93b3JrZmxvdyc7XG4gICAgZ3JvdXBlZFJlc3VsdHNbd29ya2Zsb3dLZXldID8/PSBbXTtcbiAgICBncm91cGVkUmVzdWx0c1t3b3JrZmxvd0tleV0ucHVzaChjaGVjayk7XG4gICAgcmV0dXJuIGdyb3VwZWRSZXN1bHRzO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhsYXRlc3RSZXN1bHRzQnlXb3JrZmxvdykubWFwKChbd29ya2Zsb3dLZXksIGNoZWNrc10pID0+IHtcbiAgICAgIGNvbnN0IGxhdGVzdEF0dGVtcHRDaGVja3MgPSBsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyhjaGVja3MpO1xuICAgICAgY29uc3QgZmlyc3RDaGVjayA9IGxhdGVzdEF0dGVtcHRDaGVja3NbMF07XG4gICAgICBpZiAoIWZpcnN0Q2hlY2spIHtcbiAgICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IG5vIGNoZWNrcyBmb3VuZCBmb3Igd29ya2Zsb3cgJHt3b3JrZmxvd0tleX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxhdGVzdENoZWNrID1cbiAgICAgICAgbGF0ZXN0QXR0ZW1wdENoZWNrcy5yZWR1Y2U8Q2hlY2sgfCB1bmRlZmluZWQ+KChjdXJyZW50TGF0ZXN0LCBjaGVjaykgPT4ge1xuICAgICAgICAgIGlmICghY3VycmVudExhdGVzdCkge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2spID4gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY3VycmVudExhdGVzdCkgPyBjaGVjayA6IGN1cnJlbnRMYXRlc3Q7XG4gICAgICAgIH0sIHVuZGVmaW5lZCkgPz8gZmlyc3RDaGVjaztcblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgd29ya2Zsb3dLZXksXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc2lmaWNhdGlvbjogd29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbihsYXRlc3RBdHRlbXB0Q2hlY2tzKSxcbiAgICAgICAgICBjaGVjazogbGF0ZXN0Q2hlY2ssXG4gICAgICAgICAgY2hlY2tzOiBsYXRlc3RBdHRlbXB0Q2hlY2tzLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9KVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKFxuICBjbGFzc2lmaWVkUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PlxuKTogW1JlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4sIFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD5dIHtcbiAgY29uc3QgZmFpbGVkUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiA9IHt9O1xuICBjb25zdCBydW5uaW5nUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiA9IHt9O1xuXG4gIGZvciAoY29uc3QgW3dvcmtmbG93S2V5LCByZXN1bHRdIG9mIE9iamVjdC5lbnRyaWVzKGNsYXNzaWZpZWRSZXN1bHRzKSkge1xuICAgIGlmIChyZXN1bHQuY2xhc3NpZmljYXRpb24gPT09ICdmYWlsZWQnKSB7XG4gICAgICBmYWlsZWRSZXN1bHRzW3dvcmtmbG93S2V5XSA9IHJlc3VsdDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAocmVzdWx0LmNsYXNzaWZpY2F0aW9uID09PSAncnVubmluZycgJiYgcmVzdWx0LmNoZWNrcy5zb21lKChjaGVjaykgPT4gdGVzdFJlbGF0ZWRDaGVjayhjaGVjaykpKSB7XG4gICAgICBydW5uaW5nUmVzdWx0c1t3b3JrZmxvd0tleV0gPSByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjazogQ2hlY2sgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBsaW5rID0gY2hlY2s/Lmxpbms7XG4gIGlmICghbGluaykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGxpbmsubWF0Y2goL1xcL2FjdGlvbnNcXC9ydW5zXFwvKFxcZCspLyk/LlsxXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdvcmtmbG93UnVuKHJ1bklkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkPiB7XG4gIGlmICghcnVuSWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcnVuSnNvbiA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydydW4nLCAndmlldycsIHJ1bklkLCAnLS1qc29uJywgV09SS0ZMT1dfUlVOX0pTT05fRklFTERTLmpvaW4oJywnKV0sIFsxXSk7XG4gIGlmIChydW5Kc29uLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShydW5Kc29uKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgcHJvY2Vzc1N0ZGVyci53cml0ZShgV2FybmluZzogQ291bGQgbm90IHBhcnNlIEpTT04gZm9yIHdvcmtmbG93IHJ1biAke3J1bklkfTogJHtlcnJvci5tZXNzYWdlfVxcbmApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdENoZWNrc0ZvcldvcmtmbG93KGNoZWNrczogQ2hlY2tbXSk6IENoZWNrW10ge1xuICBjb25zdCBncm91cHMgPSBjaGVja3MucmVkdWNlKChncm91cGVkQ2hlY2tzLCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IGtleSA9IHdvcmtmbG93QXR0ZW1wdEtleShjaGVjayk7XG4gICAgY29uc3QgZ3JvdXAgPSBncm91cGVkQ2hlY2tzLmdldChrZXkpO1xuICAgIGlmIChncm91cCkge1xuICAgICAgZ3JvdXAucHVzaChjaGVjayk7XG4gICAgICByZXR1cm4gZ3JvdXBlZENoZWNrcztcbiAgICB9XG4gICAgZ3JvdXBlZENoZWNrcy5zZXQoa2V5LCBbY2hlY2tdKTtcbiAgICByZXR1cm4gZ3JvdXBlZENoZWNrcztcbiAgfSwgbmV3IE1hcDxzdHJpbmcsIENoZWNrW10+KCkpO1xuXG4gIHJldHVybiBBcnJheS5mcm9tKGdyb3Vwcy52YWx1ZXMoKSkucmVkdWNlPENoZWNrW10+KChsYXRlc3RHcm91cCwgY3VycmVudEdyb3VwKSA9PiB7XG4gICAgaWYgKGxhdGVzdEdyb3VwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRHcm91cDtcbiAgICB9XG5cbiAgICByZXR1cm4gbGF0ZXN0R3JvdXBUaW1lc3RhbXAoY3VycmVudEdyb3VwKSA+IGxhdGVzdEdyb3VwVGltZXN0YW1wKGxhdGVzdEdyb3VwKSA/IGN1cnJlbnRHcm91cCA6IGxhdGVzdEdyb3VwO1xuICB9LCBbXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd0F0dGVtcHRLZXkoY2hlY2s6IENoZWNrKTogc3RyaW5nIHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjayk7XG4gIHJldHVybiBydW5JZCA/IGBydW46JHtydW5JZH1gIDogJ3Vua25vd25fcnVuJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24oY2hlY2tzOiBDaGVja1tdKTogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbiB7XG4gIGNvbnN0IGJ1Y2tldHMgPSBjaGVja3MubWFwKChjaGVjaykgPT4gY2hlY2suYnVja2V0ID8/ICcnKTtcbiAgaWYgKGJ1Y2tldHMuc29tZSgoYnVja2V0KSA9PiAhWydwYXNzJywgJ3NraXBwaW5nJywgJ3BlbmRpbmcnXS5pbmNsdWRlcyhidWNrZXQpKSkge1xuICAgIHJldHVybiAnZmFpbGVkJztcbiAgfVxuICBpZiAoYnVja2V0cy5pbmNsdWRlcygncGVuZGluZycpKSB7XG4gICAgcmV0dXJuICdydW5uaW5nJztcbiAgfVxuICByZXR1cm4gJ3N1Y2Nlc3NmdWwnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2s6IENoZWNrKTogc3RyaW5nIHtcbiAgY29uc3QgdGltZXN0YW1wID0gY2hlY2suY29tcGxldGVkQXQ7XG4gIGlmICghdGltZXN0YW1wIHx8IHRpbWVzdGFtcCA9PT0gWkVST19USU1FU1RBTVApIHtcbiAgICByZXR1cm4gY2hlY2suc3RhcnRlZEF0ID8/ICcnO1xuICB9XG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0UmVsYXRlZENoZWNrKGNoZWNrOiBDaGVjayk6IGJvb2xlYW4ge1xuICByZXR1cm4gW2NoZWNrLm5hbWUsIGNoZWNrLndvcmtmbG93XS5zb21lKCh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBURVNUX1JFTEFURURfUEFUVEVSTi50ZXN0KHZhbHVlKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcFNlY29uZHMoc2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHNsZWVwKHNlY29uZHMgKiAxMDAwKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrUHJDaSgpOiBQcm9taXNlPHsgb3V0cHV0OiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXIgfT4ge1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuXG4gIHByb2dyZXNzKCdGZXRjaGluZyBsYXRlc3QgQ0kgcmVzdWx0cy4uLicpO1xuICBjb25zdCBbY2lSZXN1bHRzLCB3YWl0QXR0ZW1wdHMsIHdhaXRUaW1lZE91dF0gPSBhd2FpdCB3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzKHByTnVtYmVyKTtcbiAgY29uc3QgY2xhc3NpZmllZExhdGVzdCA9IGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0cyk7XG4gIGNvbnN0IFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c10gPSBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoY2xhc3NpZmllZExhdGVzdCk7XG5cbiAgY29uc3QgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgc3VtbWFyeTogZGVlcENvcHkoY2lSZXN1bHRzLnN1bW1hcnkpLFxuICAgIHdhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrczogd2FpdEF0dGVtcHRzID4gMCxcbiAgICB0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF9hdHRlbXB0czogd2FpdEF0dGVtcHRzLFxuICAgIHRlc3RfcmVsYXRlZF9jaGVja193YWl0X3RpbWVkX291dDogd2FpdFRpbWVkT3V0LFxuICB9O1xuXG4gIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwKSB7XG4gICAgcGF5bG9hZC5mYWlsZWRfd29ya2Zsb3dzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhmYWlsZWRSZXN1bHRzKS5tYXAoYXN5bmMgKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4ge1xuICAgICAgICBjb25zdCBjb21wYWN0V29ya2Zsb3cgPSBhd2FpdCBjb21wYWN0V29ya2Zsb3dSZXN1bHQod29ya2Zsb3dLZXksIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY29tcGFjdFdvcmtmbG93LFxuICAgICAgICAgIC4uLmJ1aWxkRmFpbGVkV29ya2Zsb3dEZXRhaWxzKGF3YWl0IGZhaWxlZFdvcmtmbG93TG9nKHJlc3VsdC5jaGVjaykpLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLnRlc3Rfd29ya2Zsb3dfb3V0cHV0ID0gJ1RpbWVkIG91dCB3YWl0aW5nIGZvciB0ZXN0LXJlbGF0ZWQgd29ya2Zsb3dzIHRvIGZpbmlzaC4nO1xuICAgIHBheWxvYWQucnVubmluZ190ZXN0X3JlbGF0ZWRfd29ya2Zsb3dzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhydW5uaW5nUmVzdWx0cykubWFwKChbd29ya2Zsb3dLZXksIHJlc3VsdF0pID0+IGNvbXBhY3RXb3JrZmxvd1Jlc3VsdCh3b3JrZmxvd0tleSwgcmVzdWx0KSlcbiAgICApO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICByZXR1cm4geyBvdXRwdXQ6ICdBbGwgQ0kgd29ya2Zsb3dzIHBhc3NlZC5cXG4nLCBleGl0Q29kZTogMCB9O1xufVxuXG5mdW5jdGlvbiBsYXRlc3RHcm91cFRpbWVzdGFtcChjaGVja3M6IENoZWNrW10pOiBzdHJpbmcge1xuICByZXR1cm4gY2hlY2tzLnJlZHVjZSgobGF0ZXN0LCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrKTtcbiAgICByZXR1cm4gdGltZXN0YW1wID4gbGF0ZXN0ID8gdGltZXN0YW1wIDogbGF0ZXN0O1xuICB9LCAnJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbXBhY3RXb3JrZmxvd1Jlc3VsdChcbiAgd29ya2Zsb3dLZXk6IHN0cmluZyxcbiAgcmVzdWx0OiBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHRcbik6IFByb21pc2U8eyBjbGFzc2lmaWNhdGlvbjogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbiB9ICYgQ29tcGFjdFdvcmtmbG93UnVuPiB7XG4gIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsocmVzdWx0LmNoZWNrKTtcbiAgY29uc3QgcnVuID0gKGF3YWl0IHdvcmtmbG93UnVuKHJ1bklkKSkgYXMgV29ya2Zsb3dSdW5EZXRhaWxzIHwgdW5kZWZpbmVkO1xuICBjb25zdCBmYWlsZWRKb2IgPSBmYWlsZWRXb3JrZmxvd1J1bkpvYihydW4sIHN0cmluZ09yVW5kZWZpbmVkKHJlc3VsdC5jaGVjay5uYW1lKSk7XG4gIHJldHVybiB7XG4gICAgY2xhc3NpZmljYXRpb246IHJlc3VsdC5jbGFzc2lmaWNhdGlvbixcbiAgICB3b3JrZmxvdzogd29ya2Zsb3dLZXksXG4gICAgam9iOiBzdHJpbmdPclVuZGVmaW5lZChyZXN1bHQuY2hlY2submFtZSksXG4gICAgam9iX3VybDogc3RyaW5nT3JVbmRlZmluZWQoZmFpbGVkSm9iPy51cmwpLFxuICAgIGZhaWxlZF9zdGVwOiBmYWlsZWRXb3JrZmxvd1J1blN0ZXBOYW1lKGZhaWxlZEpvYiksXG4gICAgcnVuX2lkOiBydW5JZCxcbiAgICBydW5fdXJsOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LnVybCkgPz8gc3RyaW5nT3JVbmRlZmluZWQocmVzdWx0LmNoZWNrLmxpbmspLFxuICAgIGJyYW5jaDogc3RyaW5nT3JVbmRlZmluZWQocnVuPy5oZWFkQnJhbmNoKSxcbiAgICBzaGE6IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8uaGVhZFNoYSksXG4gICAgY29uY2x1c2lvbjogc3RyaW5nT3JVbmRlZmluZWQocnVuPy5jb25jbHVzaW9uKSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmFpbGVkV29ya2Zsb3dMb2coY2hlY2s6IENoZWNrKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjayk7XG4gIGlmICghcnVuSWQpIHtcbiAgICByZXR1cm4gJ0ZhaWxlZCBsYXRlc3QgcmVzdWx0IGhhcyBubyBHaXRIdWIgQWN0aW9ucyBydW4gbGluay4nO1xuICB9XG4gIHJldHVybiBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncnVuJywgJ3ZpZXcnLCBydW5JZCwgJy0tbG9nLWZhaWxlZCddLCBbMV0pO1xufVxuXG5mdW5jdGlvbiBidWlsZEZhaWxlZFdvcmtmbG93RGV0YWlscyhsb2c6IHN0cmluZyk6IHtcbiAgZmFpbGVkX2xvZzogc3RyaW5nO1xufSB7XG4gIHJldHVybiB7XG4gICAgZmFpbGVkX2xvZzogcmVmaW5lRmFpbGVkV29ya2Zsb3dMb2cobG9nKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVmaW5lRmFpbGVkV29ya2Zsb3dMb2cobG9nOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzYW5pdGl6ZWRJbnB1dCA9IHNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2coc3RyaXBWVENvbnRyb2xDaGFyYWN0ZXJzKGxvZykpO1xuICBpZiAoIXJ0a0F2YWlsYWJsZSkge1xuICAgIHJldHVybiBzYW5pdGl6ZWRJbnB1dDtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luY1NhZmUoWydydGsnLCAnbG9nJ10sIHNhbml0aXplZElucHV0KTtcbiAgcmV0dXJuIHJlc3VsdC5leGl0Q29kZSA9PT0gMCAmJiByZXN1bHQub3V0cHV0LnRyaW0oKS5sZW5ndGggPiAwXG4gICAgPyBzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nKHJlc3VsdC5vdXRwdXQpXG4gICAgOiBzYW5pdGl6ZWRJbnB1dDtcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyhsb2c6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBsb2dcbiAgICAuc3BsaXQoJ1xcbicpXG4gICAgLm1hcCgobGluZSkgPT4gbGluZS5yZXBsYWNlKEZBSUxFRF9MT0dfTElORV9QUkVGSVhfUEFUVEVSTiwgJycpKVxuICAgIC5qb2luKCdcXG4nKVxuICAgIC50cmltKCk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ09yVW5kZWZpbmVkKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gMCA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBmYWlsZWRXb3JrZmxvd1J1bkpvYihcbiAgcnVuOiBXb3JrZmxvd1J1bkRldGFpbHMgfCB1bmRlZmluZWQsXG4gIGpvYk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogV29ya2Zsb3dSdW5Kb2IgfCB1bmRlZmluZWQge1xuICBpZiAoIXJ1bj8uam9icyB8fCBydW4uam9icy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBydW4uam9icy5maW5kKChqb2IpID0+IGpvYi5uYW1lID09PSBqb2JOYW1lKSA/P1xuICAgIHJ1bi5qb2JzLmZpbmQoKGpvYikgPT4gam9iLmNvbmNsdXNpb24gPT09ICdmYWlsdXJlJykgPz9cbiAgICBydW4uam9icy5maW5kKChqb2IpID0+IGpvYi5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKVxuICApO1xufVxuXG5mdW5jdGlvbiBmYWlsZWRXb3JrZmxvd1J1blN0ZXBOYW1lKGpvYjogV29ya2Zsb3dSdW5Kb2IgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWpvYj8uc3RlcHMgfHwgam9iLnN0ZXBzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGpvYi5zdGVwcy5maW5kKChzdGVwKSA9PiBzdGVwLmNvbmNsdXNpb24gPT09ICdmYWlsdXJlJyk/Lm5hbWUgPz9cbiAgICBqb2Iuc3RlcHMuZmluZCgoc3RlcCkgPT4gc3RlcC5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKT8ubmFtZVxuICApO1xufVxuIiwiaW1wb3J0IHsgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50QmFzZUJyYW5jaCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gKGF3YWl0IGN1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2goKSkgPz8gKGF3YWl0IGN1cnJlbnREZWZhdWx0QnJhbmNoKCkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudERlZmF1bHRCcmFuY2goKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIHJlcXVpcmVOb25FbXB0eShcbiAgICAoXG4gICAgICBhd2FpdCBydW5Db21tYW5kV2l0aFByb2dyZXNzKFtcbiAgICAgICAgJ2doJyxcbiAgICAgICAgJ3JlcG8nLFxuICAgICAgICAndmlldycsXG4gICAgICAgICctLWpzb24nLFxuICAgICAgICAnZGVmYXVsdEJyYW5jaFJlZicsXG4gICAgICAgICctLXRlbXBsYXRlJyxcbiAgICAgICAgJ3t7LmRlZmF1bHRCcmFuY2hSZWYubmFtZX19JyxcbiAgICAgIF0pXG4gICAgKS50cmltKCksXG4gICAgJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGJyYW5jaCdcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGJhc2VCcmFuY2ggPSAoXG4gICAgICBhd2FpdCBydW5Db21tYW5kV2l0aFByb2dyZXNzKFsnZ2gnLCAncHInLCAndmlldycsICctLWpzb24nLCAnYmFzZVJlZk5hbWUnLCAnLS10ZW1wbGF0ZScsICd7ey5iYXNlUmVmTmFtZX19J10pXG4gICAgKS50cmltKCk7XG4gICAgcmV0dXJuIGJhc2VCcmFuY2gubGVuZ3RoID4gMCA/IGJhc2VCcmFuY2ggOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyhlcnJvcikpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0N1cnJlbnRQdWxsUmVxdWVzdE1pc3NpbmcoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIC9ubyBwdWxsIHJlcXVlc3RzPyBmb3VuZCBmb3IgYnJhbmNoL2kudGVzdChTdHJpbmcoZXJyb3IpKTtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZU5vbkVtcHR5KHZhbHVlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbiIsImltcG9ydCB7IGlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyB9IGZyb20gJy4uL3JlcG8vZGVmYXVsdEJyYW5jaC5qcyc7XG5pbXBvcnQge1xuICBjdXJyZW50UHJOdW1iZXIsXG4gIGN1cnJlbnRSZXBvUGFydHMsXG4gIGV4aXRXaXRoRXJyb3IsXG4gIGdoQWxsb3dFeGl0Q29kZXMsXG4gIGdyYXBocWwsXG4gIHR5cGUgSnNvbk9iamVjdCxcbiAgdHlwZSBNZXNzYWdlLFxuICB0eXBlIE1lc3NhZ2VDb25uZWN0aW9uLFxuICB0eXBlIE1ldGFkYXRhTm9kZSxcbiAgcHJvZ3Jlc3MsXG4gIHlhbWxEdW1wLFxufSBmcm9tICcuL3NoYXJlZC5qcyc7XG5cbnR5cGUgSXNzdWVNZXNzYWdlQ29tbWVudE5vZGUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbDtcbn07XG5cbnR5cGUgUHJSZXZpZXdOb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nIHwgbnVsbDtcbiAgc3RhdGU/OiBzdHJpbmcgfCBudWxsO1xuICBzdWJtaXR0ZWRBdD86IHN0cmluZyB8IG51bGw7XG4gIHVybDogc3RyaW5nO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbDtcbn07XG5cbnR5cGUgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgY29tbWVudHM/OiBNZXNzYWdlQ29ubmVjdGlvbjxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZT47XG4gICAgICAgIHJldmlld3M/OiBNZXNzYWdlQ29ubmVjdGlvbjxQclJldmlld05vZGU+O1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBJc3N1ZU1lc3NhZ2VzUmVzcG9uc2UgPSB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIGlzc3VlPzoge1xuICAgICAgICBjb21tZW50cz86IE1lc3NhZ2VDb25uZWN0aW9uPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlPjtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn07XG5cbnR5cGUgUHVsbFJlcXVlc3RNZXRhZGF0YVJlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IE1ldGFkYXRhTm9kZTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBJc3N1ZU1ldGFkYXRhUmVzcG9uc2UgPSB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIGlzc3VlPzogTWV0YWRhdGFOb2RlO1xuICAgIH07XG4gIH07XG59O1xuXG5jb25zdCBJU1NVRV9NRVNTQUdFU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgaXNzdWUobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IElTU1VFX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgaXNzdWUobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIG51bWJlclxuICAgICAgICB0aXRsZVxuICAgICAgICB1cmxcbiAgICAgICAgYm9keVxuICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBQUl9DT01NRU5UU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFBSX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIG51bWJlclxuICAgICAgICB0aXRsZVxuICAgICAgICB1cmxcbiAgICAgICAgYm9keVxuICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBQUl9SRVZJRVdTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgc3VibWl0dGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplSXNzdWVOdW1iZXIocmVmZXJlbmNlOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlcihyZWZlcmVuY2UsICdpc3N1ZScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUHJOdW1iZXIocmVmZXJlbmNlOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlcihyZWZlcmVuY2UsICdwdWxsIHJlcXVlc3QnKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoSXNzdWVNZXNzYWdlcyhpc3N1ZU51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBpc3N1ZU1lc3NhZ2VzKG93bmVyLCBuYW1lLCBub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZU51bWJlcikpO1xuICBwcm9ncmVzcyhgRmV0Y2hlZCBpc3N1ZSAjJHtpc3N1ZS5udW1iZXJ9IG1lc3NhZ2VzLmApO1xuICByZXR1cm4geWFtbER1bXAoeyBpc3N1ZSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoUHJNZXNzYWdlcyhwck51bWJlcj86IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc29sdmVkUHJOdW1iZXIgPSBwck51bWJlciA9PT0gdW5kZWZpbmVkID8gYXdhaXQgY3VycmVudFByTnVtYmVyKCkgOiBub3JtYWxpemVQck51bWJlcihwck51bWJlcik7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzKHJlc29sdmVkUHJOdW1iZXIpO1xuICBwcm9ncmVzcyhgRmV0Y2hlZCBwdWxsIHJlcXVlc3QgIyR7cHVsbFJlcXVlc3QubnVtYmVyfSBtZXNzYWdlcy5gKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgcHVsbF9yZXF1ZXN0OiBwdWxsUmVxdWVzdCB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBwck51bWJlck91dHB1dCA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydwcicsICd2aWV3JywgJy0tanNvbicsICdudW1iZXInLCAnLS1qcScsICcubnVtYmVyJ10sIFsxXSk7XG4gIGNvbnN0IHByTnVtYmVyID0gcHJOdW1iZXJPdXRwdXQudHJpbSgpO1xuICBpZiAoaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nKHByTnVtYmVyT3V0cHV0KSB8fCAhL15cXGQrJC8udGVzdChwck51bWJlcikpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcHVsbFJlcXVlc3QgPSBhd2FpdCBjdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMocHJOdW1iZXIpO1xuICByZXR1cm4geWFtbER1bXAoeyBwdWxsX3JlcXVlc3Q6IHB1bGxSZXF1ZXN0IH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMocHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICByZXR1cm4gYXdhaXQgcHJNZXNzYWdlcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0R2l0SHViUmVmZXJlbmNlTnVtYmVyKHJlZmVyZW5jZTogc3RyaW5nIHwgbnVtYmVyLCBsYWJlbDogJ2lzc3VlJyB8ICdwdWxsIHJlcXVlc3QnKTogc3RyaW5nIHtcbiAgY29uc3QgcmVmZXJlbmNlVGV4dCA9IFN0cmluZyhyZWZlcmVuY2UpLnRyaW0oKTtcbiAgaWYgKHJlZmVyZW5jZVRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6ICR7bGFiZWx9IHJlZmVyZW5jZSBpcyByZXF1aXJlZGAsIDIpO1xuICB9XG5cbiAgaWYgKC9eXFxkKyQvLnRlc3QocmVmZXJlbmNlVGV4dCkpIHtcbiAgICByZXR1cm4gcmVmZXJlbmNlVGV4dDtcbiAgfVxuXG4gIGNvbnN0IGtpbmRTZWdtZW50ID0gbGFiZWwgPT09ICdpc3N1ZScgPyAnaXNzdWVzJyA6ICdwdWxsJztcbiAgY29uc3QgbWF0Y2ggPSByZWZlcmVuY2VUZXh0Lm1hdGNoKFxuICAgIG5ldyBSZWdFeHAoYF5odHRwcz86Ly8oPzp3d3dcXFxcLik/Z2l0aHViXFxcXC5jb20vW14vXSsvW14vXSsvJHtraW5kU2VnbWVudH0vKFxcXFxkKykoPzovfCQpYClcbiAgKTtcbiAgaWYgKG1hdGNoPy5bMV0pIHtcbiAgICByZXR1cm4gbWF0Y2hbMV07XG4gIH1cblxuICBleGl0V2l0aEVycm9yKGBFcnJvcjogZXhwZWN0ZWQgYSBHaXRIdWIgJHtsYWJlbH0gbnVtYmVyIG9yIFVSTCwgcmVjZWl2ZWQgXCIke3JlZmVyZW5jZVRleHR9XCJgLCAyKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNzdWVNZXNzYWdlcyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGlzc3VlTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBmZXRjaE1ldGFkYXRhPElzc3VlTWV0YWRhdGFSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBJU1NVRV9RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogaXNzdWVOdW1iZXIsXG4gICAgbm91bjogJ2lzc3VlJyxcbiAgICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5pc3N1ZSxcbiAgfSk7XG4gIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSwgSXNzdWVNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IElTU1VFX01FU1NBR0VTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBpc3N1ZU51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/Lmlzc3VlPy5jb21tZW50cyxcbiAgICBtYXBOb2RlOiBjb21tZW50TWVzc2FnZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHsgLi4uaXNzdWUsIG1lc3NhZ2VzIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByTWVzc2FnZXMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgZmV0Y2hNZXRhZGF0YTxQdWxsUmVxdWVzdE1ldGFkYXRhUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIG5vdW46ICdwdWxsIHJlcXVlc3QnLFxuICAgIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0LFxuICB9KTtcbiAgY29uc3QgW2lzc3VlQ29tbWVudHMsIHJldmlld3NdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIHBySXNzdWVDb21tZW50cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICAgIHByUmV2aWV3cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICBdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnB1bGxSZXF1ZXN0LFxuICAgIG1lc3NhZ2VzOiBbLi4uaXNzdWVDb21tZW50cywgLi4ucmV2aWV3c10uc29ydChjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0KGxlZnQ6IE1lc3NhZ2UsIHJpZ2h0OiBNZXNzYWdlKTogbnVtYmVyIHtcbiAgY29uc3QgbGVmdENyZWF0ZWRBdCA9IHR5cGVvZiBsZWZ0LmNyZWF0ZWRBdCA9PT0gJ3N0cmluZycgPyBsZWZ0LmNyZWF0ZWRBdCA6ICcnO1xuICBjb25zdCByaWdodENyZWF0ZWRBdCA9IHR5cGVvZiByaWdodC5jcmVhdGVkQXQgPT09ICdzdHJpbmcnID8gcmlnaHQuY3JlYXRlZEF0IDogJyc7XG4gIHJldHVybiBsZWZ0Q3JlYXRlZEF0LmxvY2FsZUNvbXBhcmUocmlnaHRDcmVhdGVkQXQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcklzc3VlQ29tbWVudHMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgcmV0dXJuIGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8SXNzdWVNZXNzYWdlQ29tbWVudE5vZGUsIFB1bGxSZXF1ZXN0TWVzc2FnZXNSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBQUl9DT01NRU5UU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8uY29tbWVudHMsXG4gICAgbWFwTm9kZTogY29tbWVudE1lc3NhZ2UsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwclJldmlld3Mob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgcmV0dXJuIGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8UHJSZXZpZXdOb2RlLCBQdWxsUmVxdWVzdE1lc3NhZ2VzUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfUkVWSUVXU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8ucmV2aWV3cyxcbiAgICBtYXBOb2RlOiByZXZpZXdNZXNzYWdlLFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVNZXNzYWdlczxUTm9kZSwgVFJlc3BvbnNlIGV4dGVuZHMgSnNvbk9iamVjdD4oY29uZmlnOiB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIG93bmVyOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVtYmVyOiBzdHJpbmcgfCBudW1iZXI7XG4gIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZTogVFJlc3BvbnNlKSA9PiBNZXNzYWdlQ29ubmVjdGlvbjxUTm9kZT4gfCB1bmRlZmluZWQ7XG4gIG1hcE5vZGU6IChub2RlOiBUTm9kZSkgPT4gTWVzc2FnZTtcbn0pOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IG1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IGNvbmZpZy5zZWxlY3RDb25uZWN0aW9uKFxuICAgICAgYXdhaXQgZ3JhcGhxbDxUUmVzcG9uc2U+KGNvbmZpZy5xdWVyeSwge1xuICAgICAgICBvd25lcjogY29uZmlnLm93bmVyLFxuICAgICAgICBuYW1lOiBjb25maWcubmFtZSxcbiAgICAgICAgbnVtYmVyOiBOdW1iZXIoY29uZmlnLm51bWJlciksXG4gICAgICAgIGN1cnNvcixcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgIH1cblxuICAgIG1lc3NhZ2VzLnB1c2goLi4uY29ubmVjdGlvbi5ub2Rlcy5tYXAoY29uZmlnLm1hcE5vZGUpLmZpbHRlcihoYXNNZXNzYWdlQm9keSkpO1xuXG4gICAgaWYgKCFjb25uZWN0aW9uLnBhZ2VJbmZvLmhhc05leHRQYWdlKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZXM7XG4gICAgfVxuICAgIGN1cnNvciA9IGNvbm5lY3Rpb24ucGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaE1ldGFkYXRhPFRSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Q+KGNvbmZpZzoge1xuICBxdWVyeTogc3RyaW5nO1xuICBvd25lcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bWJlcjogc3RyaW5nIHwgbnVtYmVyO1xuICBub3VuOiBzdHJpbmc7XG4gIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2U6IFRSZXNwb25zZSkgPT4gTWV0YWRhdGFOb2RlIHwgdW5kZWZpbmVkO1xufSk6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IGNvbmZpZy5zZWxlY3RNZXRhZGF0YShcbiAgICBhd2FpdCBncmFwaHFsPFRSZXNwb25zZT4oY29uZmlnLnF1ZXJ5LCB7XG4gICAgICBvd25lcjogY29uZmlnLm93bmVyLFxuICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICBudW1iZXI6IE51bWJlcihjb25maWcubnVtYmVyKSxcbiAgICB9KVxuICApO1xuXG4gIGlmICghbWV0YWRhdGEpIHtcbiAgICBleGl0V2l0aEVycm9yKGBDb3VsZCBub3QgZmluZCAke2NvbmZpZy5ub3VufSAjJHtjb25maWcubnVtYmVyfSBpbiAke2NvbmZpZy5vd25lcn0vJHtjb25maWcubmFtZX0uYCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG51bWJlcjogbWV0YWRhdGEubnVtYmVyLFxuICAgIHRpdGxlOiBtZXRhZGF0YS50aXRsZSxcbiAgICB1cmw6IG1ldGFkYXRhLnVybCxcbiAgICBhdXRob3I6IG1ldGFkYXRhLmF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkLFxuICAgIGJvZHk6IG1ldGFkYXRhLmJvZHkgPz8gJycsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbW1lbnRNZXNzYWdlKGNvbW1lbnQ6IElzc3VlTWVzc2FnZUNvbW1lbnROb2RlKTogTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2NvbW1lbnQnLFxuICAgIGF1dGhvcjogY29tbWVudC5hdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCxcbiAgICBjcmVhdGVkQXQ6IGNvbW1lbnQuY3JlYXRlZEF0LFxuICAgIHVybDogY29tbWVudC51cmwsXG4gICAgYm9keTogY29tbWVudC5ib2R5LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXZpZXdNZXNzYWdlKHJldmlldzogUHJSZXZpZXdOb2RlKTogTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ3JldmlldycsXG4gICAgYXV0aG9yOiByZXZpZXcuYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQsXG4gICAgc3RhdGU6IHJldmlldy5zdGF0ZSA/PyB1bmRlZmluZWQsXG4gICAgY3JlYXRlZEF0OiByZXZpZXcuc3VibWl0dGVkQXQgPz8gdW5kZWZpbmVkLFxuICAgIHVybDogcmV2aWV3LnVybCxcbiAgICBib2R5OiByZXZpZXcuYm9keSA/PyAnJyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFzTWVzc2FnZUJvZHkobWVzc2FnZTogTWVzc2FnZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIG1lc3NhZ2UuYm9keSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZS5ib2R5Lmxlbmd0aCA+IDA7XG59XG4iLCJpbXBvcnQgeyBjdXJyZW50UHJOdW1iZXIsIGV4aXRXaXRoRXJyb3IsIGdoLCBwcm9ncmVzcywgcnVuQ29tbWFuZCwgeWFtbER1bXAgfSBmcm9tICcuL3NoYXJlZC5qcyc7XG5cbmV4cG9ydCB0eXBlIE9wZW5Qck9wdGlvbnMgPSB7XG4gIGJvZHk/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVXBkYXRlUHJPcHRpb25zID0ge1xuICBib2R5OiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblByKHsgYm9keSwgdGl0bGUgfTogT3BlblByT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaGVhZCA9IChhd2FpdCBydW5Db21tYW5kKFsnZ2l0JywgJ2JyYW5jaCcsICctLXNob3ctY3VycmVudCddKSkudHJpbSgpO1xuICBjb25zdCBiYXNlID0gKGF3YWl0IGdoKFsncmVwbycsICd2aWV3JywgJy0tanNvbicsICdkZWZhdWx0QnJhbmNoUmVmJywgJy0tanEnLCAnLmRlZmF1bHRCcmFuY2hSZWYubmFtZSddKSkudHJpbSgpO1xuXG4gIGlmICghaGVhZCkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgYnJhbmNoJyk7XG4gIH1cbiAgaWYgKCFiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgZGVmYXVsdCBicmFuY2gnKTtcbiAgfVxuICBpZiAoaGVhZCA9PT0gYmFzZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBjdXJyZW50IGJyYW5jaCBpcyB0aGUgZGVmYXVsdCBicmFuY2ggKCR7YmFzZX0pYCk7XG4gIH1cblxuICBjb25zdCBjcmVhdGVBcmdzID0gWydwcicsICdjcmVhdGUnLCAnLS1iYXNlJywgYmFzZSwgJy0taGVhZCcsIGhlYWQsICctLWZpbGwnXTtcbiAgaWYgKHRpdGxlKSB7XG4gICAgY3JlYXRlQXJncy5wdXNoKCctLXRpdGxlJywgdGl0bGUpO1xuICB9XG4gIGlmIChib2R5KSB7XG4gICAgY3JlYXRlQXJncy5wdXNoKCctLWJvZHktZmlsZScsICctJyk7XG4gIH1cblxuICBwcm9ncmVzcygnQ3JlYXRpbmcgcHVsbCByZXF1ZXN0Li4uJyk7XG4gIGF3YWl0IGdoKGNyZWF0ZUFyZ3MsIGJvZHkpO1xuXG4gIHJldHVybiB5YW1sRHVtcChcbiAgICBKU09OLnBhcnNlKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvciddKSlcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByKHsgYm9keSwgdGl0bGUgfTogVXBkYXRlUHJPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcyhgVXBkYXRpbmcgcHVsbCByZXF1ZXN0ICMke3ByTnVtYmVyfS4uLmApO1xuICByZXR1cm4gYXdhaXQgZWRpdFByKHByTnVtYmVyLCBbJy0tdGl0bGUnLCB0aXRsZSwgJy0tYm9keS1maWxlJywgJy0nXSwgYm9keSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGVkaXRQcihwck51bWJlcjogc3RyaW5nLCBlZGl0QXJnczogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGF3YWl0IGdoKFsncHInLCAnZWRpdCcsIHByTnVtYmVyLCAuLi5lZGl0QXJnc10sIHN0ZGluRGF0YSk7XG5cbiAgcmV0dXJuIHlhbWxEdW1wKFxuICAgIEpTT04ucGFyc2UoXG4gICAgICBhd2FpdCBnaChbXG4gICAgICAgICdwcicsXG4gICAgICAgICd2aWV3JyxcbiAgICAgICAgcHJOdW1iZXIsXG4gICAgICAgICctLWpzb24nLFxuICAgICAgICAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvcixib2R5JyxcbiAgICAgIF0pXG4gICAgKVxuICApO1xufVxuIiwiaW1wb3J0IHtcbiAgY3VycmVudFByTnVtYmVyLFxuICBjdXJyZW50UmVwb1BhcnRzLFxuICBleGl0V2l0aEVycm9yLFxuICBncmFwaHFsLFxuICBwcm9ncmVzcyxcbiAgcmVhZFJlcXVpcmVkU3RkaW5UZXh0LFxuICB5YW1sRHVtcCxcbn0gZnJvbSAnLi9zaGFyZWQuanMnO1xuXG50eXBlIFJldmlld0NvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgZGlmZkh1bms/OiBzdHJpbmcgfCBudWxsO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgUmV2aWV3VGhyZWFkTm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgaXNPdXRkYXRlZD86IGJvb2xlYW4gfCBudWxsO1xuICBwYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgbGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsTGluZT86IG51bWJlciB8IG51bGw7XG4gIHN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsU3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgY29tbWVudHM6IHtcbiAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICBwYWdlSW5mbzoge1xuICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgIH07XG4gIH07XG59O1xuXG5jb25zdCBSRVZJRVdfVEhSRUFEX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3VGhyZWFkcyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICBpc091dGRhdGVkXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgICBsaW5lXG4gICAgICAgICAgICBvcmlnaW5hbExpbmVcbiAgICAgICAgICAgIHN0YXJ0TGluZVxuICAgICAgICAgICAgb3JpZ2luYWxTdGFydExpbmVcbiAgICAgICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDApIHtcbiAgICAgICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgICAgIGRpZmZIdW5rXG4gICAgICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFJFVklFV19DT01NRU5UX1FVRVJZID0gYFxuICBxdWVyeSgkdGhyZWFkSWQ6IElEISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgbm9kZShpZDogJHRocmVhZElkKSB7XG4gICAgICAuLi4gb24gUHVsbFJlcXVlc3RSZXZpZXdUaHJlYWQge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgZGlmZkh1bmtcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdUaHJlYWRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgnRXJyb3I6IEpTT04gaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nKTtcbiAgY29uc3QgcGF5bG9hZCA9IHBhcnNlUmVwbHlJbnB1dChpbnB1dCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRSZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgW3RocmVhZElkLCBib2R5XSBvZiBPYmplY3QuZW50cmllcyhwYXlsb2FkLnJlcGxpZXMpKSB7XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWRSZXBsaWVzW3RocmVhZElkXSA9IGJvZHk7XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemVkUmVwbGllcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhcbiAgcXVlcnk6IHN0cmluZyxcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyLFxuICBvblRocmVhZDogKHRocmVhZDogUmV2aWV3VGhyZWFkTm9kZSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD5cbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IHJldmlld1RocmVhZHMgPSAoXG4gICAgICBhd2FpdCBncmFwaHFsPHtcbiAgICAgICAgZGF0YT86IHtcbiAgICAgICAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgICAgICAgcHVsbFJlcXVlc3Q/OiB7XG4gICAgICAgICAgICAgIHJldmlld1RocmVhZHM/OiB7XG4gICAgICAgICAgICAgICAgbm9kZXM6IFJldmlld1RocmVhZE5vZGVbXTtcbiAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9PihxdWVyeSwge1xuICAgICAgICBvd25lcixcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbnVtYmVyOiBOdW1iZXIocHJOdW1iZXIpLFxuICAgICAgICBjdXJzb3IsXG4gICAgICB9KVxuICAgICkuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3Q/LnJldmlld1RocmVhZHM7XG5cbiAgICBpZiAoIXJldmlld1RocmVhZHMpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoXG4gICAgICAgICdDb3VsZCBub3QgZmluZCByZXZpZXdUaHJlYWRzIGluIEdyYXBoUUwgcmVzcG9uc2UuIFRoZSBwdWxsIHJlcXVlc3QgbWF5IG5vdCBleGlzdCBvciB0aGVyZSB3YXMgYW4gQVBJIGVycm9yLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0aHJlYWQgb2YgcmV2aWV3VGhyZWFkcy5ub2Rlcykge1xuICAgICAgYXdhaXQgb25UaHJlYWQodGhyZWFkKTtcbiAgICB9XG5cbiAgICBpZiAoIXJldmlld1RocmVhZHMucGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3Vyc29yID0gcmV2aWV3VGhyZWFkcy5wYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzKFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXJcbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgaWRzOiBzdHJpbmdbXSA9IFtdO1xuICBhd2FpdCBwYWdpbmF0ZVJldmlld1RocmVhZHMoUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlksIG93bmVyLCBuYW1lLCBwck51bWJlciwgKHRocmVhZCkgPT4ge1xuICAgIGlmICghdGhyZWFkLmlzUmVzb2x2ZWQpIHtcbiAgICAgIGlkcy5wdXNoKHRocmVhZC5pZCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlkcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzKFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXJcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4ge1xuICBjb25zdCB0aHJlYWRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdID0gW107XG5cbiAgYXdhaXQgcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFJFVklFV19USFJFQURfUVVFUlksIG93bmVyLCBuYW1lLCBwck51bWJlciwgYXN5bmMgKHRocmVhZCkgPT4ge1xuICAgIGlmICh0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbW1lbnRzID0gdGhyZWFkLmNvbW1lbnRzLm5vZGVzLm1hcChub3JtYWxpemVDb21tZW50QXV0aG9yKTtcbiAgICBsZXQgcGFnZUluZm8gPSB0aHJlYWQuY29tbWVudHMucGFnZUluZm87XG4gICAgbGV0IGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG5cbiAgICB3aGlsZSAocGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIGNvbnN0IGNvbW1lbnRDb25uZWN0aW9uID0gKFxuICAgICAgICBhd2FpdCBncmFwaHFsPHtcbiAgICAgICAgICBkYXRhPzoge1xuICAgICAgICAgICAgbm9kZT86IHtcbiAgICAgICAgICAgICAgY29tbWVudHM/OiB7XG4gICAgICAgICAgICAgICAgbm9kZXM6IFJldmlld0NvbW1lbnROb2RlW107XG4gICAgICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9PihSRVZJRVdfQ09NTUVOVF9RVUVSWSwgeyB0aHJlYWRJZDogdGhyZWFkLmlkLCBjdXJzb3IgfSlcbiAgICAgICkuZGF0YT8ubm9kZT8uY29tbWVudHM7XG5cbiAgICAgIGlmICghY29tbWVudENvbm5lY3Rpb24pIHtcbiAgICAgICAgZXhpdFdpdGhFcnJvcihgQ291bGQgbm90IGZpbmQgY29tbWVudHMgaW4gR3JhcGhRTCByZXNwb25zZSBmb3IgdGhyZWFkICR7dGhyZWFkLmlkfS5gKTtcbiAgICAgIH1cblxuICAgICAgY29tbWVudHMucHVzaCguLi5jb21tZW50Q29ubmVjdGlvbi5ub2Rlcy5tYXAobm9ybWFsaXplQ29tbWVudEF1dGhvcikpO1xuICAgICAgcGFnZUluZm8gPSBjb21tZW50Q29ubmVjdGlvbi5wYWdlSW5mbztcbiAgICAgIGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhyZWFkcy5wdXNoKHtcbiAgICAgIGlkOiB0aHJlYWQuaWQsXG4gICAgICBpc1Jlc29sdmVkOiB0aHJlYWQuaXNSZXNvbHZlZCxcbiAgICAgIGlzT3V0ZGF0ZWQ6IHRocmVhZC5pc091dGRhdGVkLFxuICAgICAgcGF0aDogdGhyZWFkLnBhdGgsXG4gICAgICBsaW5lOiB0aHJlYWQubGluZSxcbiAgICAgIG9yaWdpbmFsTGluZTogdGhyZWFkLm9yaWdpbmFsTGluZSxcbiAgICAgIHN0YXJ0TGluZTogdGhyZWFkLnN0YXJ0TGluZSxcbiAgICAgIG9yaWdpbmFsU3RhcnRMaW5lOiB0aHJlYWQub3JpZ2luYWxTdGFydExpbmUsXG4gICAgICBjb21tZW50cyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRocmVhZHM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0UHJSZXZpZXdUaHJlYWRzKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoJ0ZldGNoaW5nIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMuLi4nKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgdW5yZXNvbHZlZF90aHJlYWRzOiBhd2FpdCB1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcbiAgY29uc3QgdW5yZXNvbHZlZElkcyA9IG5ldyBTZXQoYXdhaXQgdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpKTtcblxuICBwcm9ncmVzcyhgUmVwbHlpbmcgdG8gJHtPYmplY3Qua2V5cyhyZXBsaWVzKS5sZW5ndGh9IHJldmlldyB0aHJlYWRzLi4uYCk7XG5cbiAgY29uc3QgcmVzb2x2ZWRUaHJlYWRJZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhyZXBsaWVzKTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgW3RocmVhZElkLCBib2R5XV0gb2YgZW50cmllcy5lbnRyaWVzKCkpIHtcbiAgICBwcm9ncmVzcyhgUHJvY2Vzc2luZyAke2luZGV4ICsgMX0vJHtlbnRyaWVzLmxlbmd0aH06ICR7dGhyZWFkSWR9YCk7XG4gICAgaWYgKCF1bnJlc29sdmVkSWRzLmhhcyh0aHJlYWRJZCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ3JhcGhxbDx7XG4gICAgICBkYXRhPzoge1xuICAgICAgICByZXNvbHZlUmV2aWV3VGhyZWFkPzoge1xuICAgICAgICAgIHRocmVhZD86IHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICBpc1Jlc29sdmVkOiBib29sZWFuO1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH0+KFxuICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkdGhyZWFkSWQ6IElEISwgJGJvZHk6IFN0cmluZyEpIHtcbiAgICAgICAgICBhZGRQdWxsUmVxdWVzdFJldmlld1RocmVhZFJlcGx5KGlucHV0OiB7cHVsbFJlcXVlc3RSZXZpZXdUaHJlYWRJZDogJHRocmVhZElkLCBib2R5OiAkYm9keX0pIHtcbiAgICAgICAgICAgIGNvbW1lbnQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZVJldmlld1RocmVhZChpbnB1dDoge3RocmVhZElkOiAkdGhyZWFkSWR9KSB7XG4gICAgICAgICAgICB0aHJlYWQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgeyB0aHJlYWRJZCwgYm9keSB9XG4gICAgKTtcblxuICAgIGlmIChyZXNwb25zZS5kYXRhPy5yZXNvbHZlUmV2aWV3VGhyZWFkPy50aHJlYWQ/LmlzUmVzb2x2ZWQpIHtcbiAgICAgIHJlc29sdmVkVGhyZWFkSWRzLnB1c2godGhyZWFkSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9ncmVzcyhgV2FybmluZzogZmFpbGVkIHRvIHJlc29sdmUgdGhyZWFkICR7dGhyZWFkSWR9LmApO1xuICAgIH1cbiAgfVxuXG4gIHByb2dyZXNzKCdEb25lLicpO1xuICByZXR1cm4geWFtbER1bXAoeyByZXNvbHZlZF90aHJlYWRfaWRzOiByZXNvbHZlZFRocmVhZElkcyB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tbWVudEF1dGhvcihjb21tZW50OiBSZXZpZXdDb21tZW50Tm9kZSk6IFJldmlld0NvbW1lbnROb2RlICYgeyBhdXRob3I/OiBzdHJpbmcgfCBudWxsIH0ge1xuICByZXR1cm4ge1xuICAgIC4uLmNvbW1lbnQsXG4gICAgYXV0aG9yOiB0eXBlb2YgY29tbWVudC5hdXRob3IgPT09ICdzdHJpbmcnID8gY29tbWVudC5hdXRob3IgOiAoY29tbWVudC5hdXRob3I/LmxvZ2luID8/IG51bGwpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlcGx5SW5wdXQoaW5wdXQ6IHN0cmluZyk6IHsgcmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGNvbnN0IGVycm9yUHJlZml4ID0gJ0Vycm9yOiBJbnZhbGlkIGlucHV0IGZvcm1hdCBvbiBzdGRpbic7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGlucHV0KSBhcyB1bmtub3duO1xuICAgIGlmICghaXNSZXBseUlucHV0KHBhcnNlZCkpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoYCR7ZXJyb3JQcmVmaXh9OiBleHBlY3RlZCBhbiBvYmplY3Qgd2l0aCBhIHN0cmluZy12YWx1ZWQgXFxgcmVwbGllc1xcYCBtYXBgLCAyKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IEludmFsaWQgSlNPTiBwcm92aWRlZCBvbiBzdGRpbjogJHtlcnJvci5tZXNzYWdlfWAsIDIpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1JlcGx5SW5wdXQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyB7IHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IH0ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJlcGxpZXMgPSAodmFsdWUgYXMgeyByZXBsaWVzPzogdW5rbm93biB9KS5yZXBsaWVzO1xuICBpZiAodHlwZW9mIHJlcGxpZXMgIT09ICdvYmplY3QnIHx8IHJlcGxpZXMgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShyZXBsaWVzKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QudmFsdWVzKHJlcGxpZXMpLmV2ZXJ5KChyZXBseSkgPT4gcmVwbHkgPT09IG51bGwgfHwgcmVwbHkgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgcmVwbHkgPT09ICdzdHJpbmcnKTtcbn1cbiIsImltcG9ydCB7IGZldGNoSXNzdWVNZXNzYWdlcyB9IGZyb20gJy4uL3ByL3ByQ29tbWFuZHMuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRQbGFuUHJvbXB0KGlzc3VlTnVtYmVyOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBpc3N1ZVlhbWwgPSBhd2FpdCBmZXRjaElzc3VlTWVzc2FnZXMoaXNzdWVOdW1iZXIpO1xuXG4gIHJldHVybiBgXG5QbGFuIGEgR2l0SHViIGlzc3VlIGJ5IGdhdGhlcmluZyBjb250ZXh0LCB3cml0aW5nIGEgc3BlY2lmaWNhdGlvbiBmb3Igc29mdHdhcmUgZW5naW5lZXJzLCBhbmQgcG9zdGluZyBvciB1cGRhdGluZyB0aGF0IHNwZWNpZmljYXRpb24gYmFjayB0byB0aGUgaXNzdWUuXG5UaGUgdGFyZ2V0IGlzc3VlIG51bWJlciBpcyAjJHtpc3N1ZU51bWJlcn0uIEhlcmUgaXMgdGhlIGZldGNoZWQgaXNzdWUgY29udGV4dCBhcyBZQU1MOlxufn5+fnlhbWxcbiR7aXNzdWVZYW1sLnRyaW0oKX1cbn5+fn5cblxuRm9sbG93IHRoaXMgd29ya2Zsb3c6XG4xLiBSZWFkIHRoZSBhYm92ZSBpc3N1ZSBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBjYXJlZnVsbHkuXG4yLiBDb2xsZWN0IGVub3VnaCBzdXBwb3J0aW5nIGluZm9ybWF0aW9uIGJlZm9yZSB3cml0aW5nIHRoZSBzcGVjaWZpY2F0aW9uOlxuICAgLSBJbnNwZWN0IHRoZSByZWxldmFudCBjb2RlLCBzdXJyb3VuZGluZyBjYWxsIHNpdGVzLCByZWxhdGVkIHR5cGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbiwgcmVjZW50IGRpZmZzLCBhbmQgYW55IG90aGVyIGxvY2FsIGNvbnRleHQgbmVlZGVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZS5cbiAgIC0gSWYgY29kZSBpbnNwZWN0aW9uIGlzIGVub3VnaCwgdXNlIHRoZSBjdXJyZW50IGNvZGViYXNlIGFzIHRoZSBwcmltYXJ5IGV2aWRlbmNlLlxuICAgLSBJZiB0aGUgaXNzdWUgZGVwZW5kcyBvbiBydW50aW1lIGJlaGF2aW9yLCByZXByb2R1Y2UgaXQgd2l0aCB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGV4cGVyaW1lbnQsIHN1Y2ggYXMgYSBmb2N1c2VkIGNvbW1hbmQsIGEgdGlueSBzY3JpcHQsIGEgdGVtcG9yYXJ5IGxvY2FsIGFzc2VydGlvbiwgb3IgYW5vdGhlciBuYXJyb3cgY2hlY2sgdGhhdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGludGVuZGVkIGJlaGF2aW9yLlxuICAgICAtIENsZWFuIHVwIGFueSB0ZW1wb3JhcnkgZmlsZXMgYWZ0ZXIgdGhlIGV4cGVyaW1lbnQuXG4gICAtIElmIHRoZSBpc3N1ZSBkZXBlbmRzIG9uIGEgbGlicmFyeSwgQVBJLCBvciBsYW5ndWFnZSBmZWF0dXJlLCBjb25maXJtIGl0IGFnYWluc3QgdGhlIGxhdGVzdCBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIG9yIGFub3RoZXIgcHJpbWFyeSBzb3VyY2UgaW5zdGVhZCBvZiByZWx5aW5nIG9uIG1lbW9yeS5cbjMuIFdyaXRlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgaXNzdWUgY29tbWVudC5cbiAgIC0gV3JpdGUgdGhlIGJhY2tncm91bmQgYmFzZWQgb24gdGhlIGNvbGxlY3RlZCBpbmZvcm1hdGlvbi5cbiAgIC0gRGVmaW5lIGEgZ29hbCB0aGF0IGNsZWFybHkgZ3VpZGVzIG91ciBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLlxuICAgLSBXcml0ZSBhIGRldGFpbGVkIHNwZWNpZmljYXRpb24gaW5jb3Jwb3JhdGluZyB0aGUgZXZpZGVuY2UgeW91IGNvbGxlY3RlZC5cbiAgIC0gSWYgbmVlZGVkLCBpbmNsdWRlIGNvZGUgc25pcHBldHMgdGhhdCBleHBsYWluIGhvdyB0byB1c2UgbGlicmFyaWVzIG9yIEFQSXMsIGFsb25nIHdpdGggcmVmZXJlbmNlcyB0byB0aGVpciBkb2N1bWVudGF0aW9uLlxuNC4gUG9zdCB0aGUgc3BlY2lmaWNhdGlvbiBiYWNrIHRvIGlzc3VlICMke2lzc3VlTnVtYmVyfSwgdGhlbiBwcmludCB0aGUgaXNzdWUgVVJMLlxuICAgLSBJZiB0aGUgaXNzdWUgYWxyZWFkeSBoYXMgYSBzcGVjaWZpY2F0aW9uLCB1cGRhdGUgdGhlIGV4aXN0aW5nIGNvbW1lbnQgaW5zdGVhZCBvZiBwb3N0aW5nIGEgbmV3IG9uZS5cblxuRm9ybWF0IHRoZSBpc3N1ZSBjb21tZW50IGV4YWN0bHkgbGlrZSB0aGlzLCBidXQgZG8gbm90IGluY2x1ZGUgdGhlIHN1cnJvdW5kaW5nIFxcYH5+fn5cXGAgZmVuY2VzIGluIHRoZSBhY3R1YWwgY29tbWVudDpcbn5+fn5cbiMjIEJhY2tncm91bmRcblxuW1N1bW1hcml6ZSB0aGUgY3VycmVudCBiZWhhdmlvciBhbmQgZXhwbGFpbiB0aGUgbW90aXZhdGlvbiBiZWhpbmQgdGhpcyBpc3N1ZV1cblxuIyMgR29hbFxuXG5bRGVmaW5lIHRoZSBnb2FsIHdlIHdhbnQgdG8gYWNoaWV2ZSBpbiB0aGlzIGlzc3VlXVxuXG4jIyBTcGVjaWZpY2F0aW9uXG5cbltEZXRhaWxlZCBzcGVjaWZpY2F0aW9uIGZvciBzb2Z0d2FyZSBlbmdpbmVlcnNdXG5cbiMjIEtleSBUZWNobm9sb2dpZXMgKE9OTFkgaWYgZXh0ZXJuYWwgcmVzb3VyY2VzIGFyZSBuZWVkZWQpXG5cbltEZXNjcmliZSB3aGF0IGxpYnJhcmllcyBvciBBUElzIHdlIHNob3VsZCB1c2UsIGluY2x1ZGluZyBjb25jcmV0ZSB2ZXJzaW9ucyBhbmQgY29kZSBzbmlwcGV0cy5dXG5cbn5+fn5cbmAudHJpbSgpO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZChiYXNlQnJhbmNoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYGdpdCBtZXJnZS1iYXNlICR7c2hlbGxRdW90ZShgb3JpZ2luLyR7YmFzZUJyYW5jaH1gKX0gSEVBRCAyPi9kZXYvbnVsbCB8fCBnaXQgbWVyZ2UtYmFzZSAke3NoZWxsUXVvdGUoYmFzZUJyYW5jaCl9IEhFQURgO1xufVxuXG5mdW5jdGlvbiBzaGVsbFF1b3RlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCcke3ZhbHVlLnJlcGxhY2VBbGwoXCInXCIsIFwiJ1xcXCInXFxcIidcIil9J2A7XG59XG4iLCJpbXBvcnQgeyBmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUgfSBmcm9tICcuLi9wci9wckNvbW1hbmRzLmpzJztcbmltcG9ydCB7IGN1cnJlbnRCYXNlQnJhbmNoIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSB9IGZyb20gJy4uL3Jldmlldy9ub0NvbmNlcm4uanMnO1xuaW1wb3J0IHsgYnVpbGRNZXJnZUJhc2VDb21tYW5kIH0gZnJvbSAnLi9iYXNlQnJhbmNoRGlmZkNvbW1hbmQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRSZXZpZXdQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYmFzZUJyYW5jaCA9IGF3YWl0IGN1cnJlbnRCYXNlQnJhbmNoKCk7XG4gIGNvbnN0IG1lcmdlQmFzZUNvbW1hbmQgPSBidWlsZE1lcmdlQmFzZUNvbW1hbmQoYmFzZUJyYW5jaCk7XG4gIGNvbnN0IHByQ29udGV4dCA9IGF3YWl0IGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSgpO1xuICByZXR1cm4gYFxuUmV2aWV3IHRoZSBjdXJyZW50ICR7cHJDb250ZXh0ID8gJ3B1bGwgcmVxdWVzdCcgOiAnYnJhbmNoJ30gYWdhaW5zdCBpdHMgYmFzZSBicmFuY2ggJHtiYXNlQnJhbmNofSB2aWEgXFxgZ2l0IGRpZmYgXCIkKCR7bWVyZ2VCYXNlQ29tbWFuZH0pXCJcXGAuXG5Gb3IgZWFjaCBmaW5kaW5nLCBkbyB0aGUgZm9sbG93aW5nIHRocmVlIHN0ZXBzOlxuMS4gR2F0aGVyIHN1cHBvcnRpbmcgZXZpZGVuY2U6XG4gICAtIEluc3BlY3QgdGhlIHJlZmVyZW5jZWQgY29kZSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCBhbmQgcmVjZW50IGRpZmZzIHdoZW4gdGhleSBhZmZlY3QgdGhlIGNsYWltLlxuICAgLSBJZiBjb2RlIGluc3BlY3Rpb24gaXMgZW5vdWdoLCB1c2UgdGhlIGN1cnJlbnQgY29kZWJhc2UgYXMgdGhlIHByaW1hcnkgZXZpZGVuY2UuXG4gICAtIElmIHRoZSBmaW5kaW5nIGlzIGFib3V0IHJ1bnRpbWUgYmVoYXZpb3IsIHJlcHJvZHVjZSBpdCB3aXRoIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgZXhwZXJpbWVudCwgc3VjaCBhcyBhIGZvY3VzZWQgY29tbWFuZCwgYSB0aW55IHNjcmlwdCwgYSB0ZW1wb3JhcnkgbG9jYWwgYXNzZXJ0aW9uLCBvciBhbm90aGVyIG5hcnJvdyBjaGVjayB0aGF0IGRvZXMgbm90IGNoYW5nZSB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuXG4gICAgIC0gQ2xlYW4gdXAgYW55IHRlbXBvcmFyeSBmaWxlcyBhZnRlciB0aGUgZXhwZXJpbWVudC5cbiAgIC0gSWYgdGhlIGZpbmRpbmcgZGVwZW5kcyBvbiBmcmFtZXdvcmssIGxpYnJhcnksIHBsYXRmb3JtLCBvciBsYW5ndWFnZSBiZWhhdmlvciwgY29uZmlybSBpdCBhZ2FpbnN0IHRoZSBsYXRlc3Qgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBvciBhbm90aGVyIHByaW1hcnkgc291cmNlIGluc3RlYWQgb2YgcmVseWluZyBvbiBtZW1vcnkuXG4yLiBKdWRnZSB3aGV0aGVyIHRoZSBmaW5kaW5nIGlzIHZhbGlkOlxuICAgLSBNYXJrIGl0IHZhbGlkIG9ubHkgd2hlbiB0aGUgYXZhaWxhYmxlIGV2aWRlbmNlIHNob3dzIHRoZSByZXBvcnRlZCBpc3N1ZSBpcyBzdGlsbCByZWFsIGluIHRoZSBjdXJyZW50IGNvZGViYXNlLlxuICAgLSBPdGhlcndpc2UsIG1hcmsgaXQgbm90IHZhbGlkLlxuMy4gUHJvcG9zZSBhIGZpeCB3aXRob3V0IG1vZGlmeWluZyB0aGUgY29kZTpcbiAgIC0gRGVzY3JpYmUgdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBjaGFuZ2UgdGhhdCB3b3VsZCBhZGRyZXNzIHRoZSBmaW5kaW5nLlxuICAgLSBJbnZlc3RpZ2F0ZSB0aGUgbGlrZWx5IGltcGFjdCBvZiB0aGF0IGNoYW5nZSBieSBpbnNwZWN0aW5nIHRoZSBhZmZlY3RlZCBjYWxsIHNpdGVzLCByZWxhdGVkIHR5cGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbiwgYW5kIGFkamFjZW50IGJlaGF2aW9yLCBhbmQgbm90ZSBhbnkgZm9sbG93LXVwIGNoYW5nZXMgb3Igcmlza3MgdGhlIGZpeCB3b3VsZCBuZWVkIHRvIGFjY291bnQgZm9yLlxuXG5SZXBvcnQgb25seSB0aGUgdmFsaWQgZmluZGluZ3MsIHRoZSBldmlkZW5jZSBmb3IgZWFjaCBvbmUsIGFuZCB0aGUgcHJvcG9zZWQgZml4IHdpdGggaXRzIGxpa2VseSBpbXBhY3QuIEluY2x1ZGUgYSBicmllZiBqdXN0aWZpY2F0aW9uIGZvciBlYWNoLCBjaXRpbmcgdGhlIGV2aWRlbmNlIHVzZWQgKGUuZy4sIGEgZmFpbGluZyBzY2VuYXJpbywgZXhwZXJpbWVudCByZXN1bHQsIG9yIG9mZmljaWFsIGRvY3VtZW50YXRpb24pLiBEbyBub3QgbW9kaWZ5IHRoZSBjb2RlLlxuSWYgdGhlcmUgYXJlIG5vIHZhbGlkIGZpbmRpbmdzLCByZXNwb25kIGV4YWN0bHkgd2l0aDogXFxgJHtOT19DT05DRVJOX01FU1NBR0V9XFxgXG5cbiR7YnVpbGRQckNvbnRleHRJbnN0cnVjdGlvbnMocHJDb250ZXh0KX1cbmAudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBidWlsZFByQ29udGV4dEluc3RydWN0aW9ucyhwckNvbnRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIHJldHVybiBwckNvbnRleHRcbiAgICA/IGBDdXJyZW50IHB1bGwgcmVxdWVzdCBjb250ZXh0Olxufn5+fnlhbWxcbiR7cHJDb250ZXh0LnRyaW0oKX1cbn5+fn5cbmAudHJpbSgpXG4gICAgOiAnJztcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBidWlsZFNjcmVlbnNob3RQcm9tcHQoaW5pdGlhbFVybDogc3RyaW5nLCBwYWdlTmFtZTogc3RyaW5nLCBzY3JlZW5zaG90RGVzY3JpcHRpb246IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNhbml0aXplZERlc2NyaXB0aW9uID0gc2NyZWVuc2hvdERlc2NyaXB0aW9uLnJlcGxhY2VBbGwoJ1xcbicsICcgJykucmVwbGFjZUFsbCgnXCInLCBcIidcIik7XG4gIHJldHVybiBgXG5Vc2UgXFxgcGxheXdyaWdodC1jbGlcXGAgc2tpbGwgdG8gdGFrZSBhIHNjcmVlbnNob3Qgb2YgXCIke3Nhbml0aXplZERlc2NyaXB0aW9ufVwiIGJ5IG5hdmlnYXRpbmcgZnJvbSAke2luaXRpYWxVcmx9IHRvIFwiJHtwYWdlTmFtZX1cIiBwYWdlLlxuXG5Gb2xsb3cgdGhpcyB3b3JrZmxvdzpcbjEuIE9wZW4gdGhlIGluaXRpYWwgcGFnZSBhdCAke2luaXRpYWxVcmx9LlxuMi4gTmF2aWdhdGUgZnJvbSB0aGF0IGluaXRpYWwgcGFnZSB1bnRpbCB5b3UgcmVhY2ggdGhlIHBhZ2UgaWRlbnRpZmllZCBhcyAke3BhZ2VOYW1lfS5cbiAgIC0gSWYgY29kZSBlcnJvcnMsIHJ1bnRpbWUgZmFpbHVyZXMsIG9yIGJyb2tlbiBVSSBmbG93cyBwcmV2ZW50IG5hdmlnYXRpb24sIGludmVzdGlnYXRlIHRoZSBjYXVzZSBpbiB0aGUgbG9jYWwgY29kZWJhc2UsIG1ha2UgdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBjb2RlIGZpeCwgYW5kIHZlcmlmeSB0aGF0IHRoZSBwYWdlIGNhbiBub3cgYmUgcmVhY2hlZCBiZWZvcmUgY29udGludWluZy5cbiAgIC0gSWYgeW91IGNhbm5vdCBmaXggdGhlIGVycm9ycywgcmVwb3J0IG9uIHRoZSBlcnJvcnMgdGhlbiBzdG9wLlxuMy4gQ2FwdHVyZSBhIHNjcmVlbnNob3QgdGhhdCBmb2N1c2VzIG9uIHRoaXMgdGFyZ2V0OiBcIiR7c2FuaXRpemVkRGVzY3JpcHRpb259XCIuXG40LiBLZWVwIHRoZSBnZW5lcmF0ZWQgaW1hZ2UgYXJ0aWZhY3QgYW5kIHJlcG9ydCB0aGUgc2NyZWVuc2hvdCBmaWxlIHBhdGggcGx1cyBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHdoYXQgd2FzIGNhcHR1cmVkLiBJZiB5b3UgaGFkIHRvIGZpeCBjb2RlIGZpcnN0LCBhbHNvIHN1bW1hcml6ZSB0aGUgZml4LlxuYC50cmltKCk7XG59XG4iLCJpbXBvcnQgeyBmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUgfSBmcm9tICcuLi9wci9wckNvbW1hbmRzLmpzJztcbmltcG9ydCB7IGN1cnJlbnRCYXNlQnJhbmNoIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZCB9IGZyb20gJy4vYmFzZUJyYW5jaERpZmZDb21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYmFzZUJyYW5jaCA9IGF3YWl0IGN1cnJlbnRCYXNlQnJhbmNoKCk7XG4gIGNvbnN0IG1lcmdlQmFzZUNvbW1hbmQgPSBidWlsZE1lcmdlQmFzZUNvbW1hbmQoYmFzZUJyYW5jaCk7XG4gIGNvbnN0IHByQ29udGV4dCA9IGF3YWl0IGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSgpO1xuICByZXR1cm4gYFxuU2ltcGxpZnkgdGhlIGN1cnJlbnQgJHtwckNvbnRleHQgPyAncHVsbCByZXF1ZXN0JyA6ICdicmFuY2gnfSBhZ2FpbnN0IGl0cyBiYXNlIGJyYW5jaCB1c2luZyBcXGBnaXQgZGlmZiBcIiQoJHttZXJnZUJhc2VDb21tYW5kfSlcIlxcYC5cbkZpcnN0LCBpbnNwZWN0IHRoZSBkaWZmIGFuZCByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGVhY2ggY2hhbmdlZCBhcmVhLiBUaGlzIGluY2x1ZGVzIG5lYXJieSBmdW5jdGlvbnMsIHR5cGVzLCBjYWxsIHNpdGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbnMsIGFuZCBhbnkgb3RoZXIgZmlsZXMgdGhhdCBoZWxwIGRldGVybWluZSBpZiB0aGUgY2hhbmdlIGlzIHRydWx5IG5lY2Vzc2FyeS5cbkxldmVyYWdlIHRoaXMgY29udGV4dCB0byBpZGVudGlmeSByZWR1bmRhbmNpZXMgdGhhdCBjYW4gYmUgc2FmZWx5IHJlbW92ZWQgb3Igc2ltcGxpZmllZC4gTG9vayBmb3IgZHVwbGljYXRlIGxvZ2ljLCByZXBlYXRlZCBjb25kaXRpb25hbHMsIHVubmVjZXNzYXJ5IGFic3RyYWN0aW9ucywgb3ZlcmxhcHBpbmcgY29kZSBwYXRocywgZGVhZCBjb2RlLCBvciBlZGl0cyBtYWRlIG9ic29sZXRlIHVwb24gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5Qcmlvcml0aXplIHNpbXBsaWZpY2F0aW9ucyB0aGF0IHJlZHVjZSB0aGUgcmV2aWV3ZXIncyBidXJkZW4sIHN1Y2ggYXM6XG4tIFJlbW92aW5nIHJlZHVuZGFudCBlZGl0cyBvciBkZWFkIGNvZGUuXG4tIEVsaW1pbmF0aW5nIG9yIG1lcmdpbmcgZHVwbGljYXRlZCBsb2dpYyBkaXNjb3ZlcmVkIGJ5IGNvbXBhcmluZyB0aGUgZGlmZiB3aXRoIHJlbGF0ZWQgY29kZS5cbi0gRmxhdHRlbmluZyB1bm5lY2Vzc2FyaWx5IGNvbXBsZXggbG9naWMgaW50cm9kdWNlZCBpbiB0aGUgZGlmZiAoZS5nLiwgdXNpbmcgZWFybHkgcmV0dXJucyB0byByZWR1Y2UgbmVzdGluZywgc2ltcGxpZnlpbmcgYm9vbGVhbiBleHByZXNzaW9ucywgb3IgcmVtb3ZpbmcgcmVkdW5kYW50IHdyYXBwZXIgZnVuY3Rpb25zKS5cblxuQ29tbWl0IGFuZCBwdXNoIHlvdXIgY2hhbmdlcy4gQWZ0ZXJ3YXJkLCBzdW1tYXJpemUgdGhlIHJlZHVuZGFuY2llcyBvciB1bm5lY2Vzc2FyeSBjb21wbGV4aXR5IHlvdSBoYXZlIHJlbW92ZWQuXG5cbiR7cHJDb250ZXh0ID8gYEN1cnJlbnQgcHVsbCByZXF1ZXN0IGNvbnRleHQ6XFxufn5+fnlhbWxcXG4ke3ByQ29udGV4dC50cmltKCl9XFxufn5+fmAgOiAnJ31cbmAudHJpbSgpO1xufVxuIiwiaW1wb3J0IHsgZmlsZVVSTFRvUGF0aCB9IGZyb20gJ25vZGU6dXJsJztcbmltcG9ydCB7IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbFBhY2tlZFNraWxscygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhcbiAgICBbXG4gICAgICAnYnVueCcsXG4gICAgICAnc2tpbGxzQGxhdGVzdCcsXG4gICAgICAnYWRkJyxcbiAgICAgIGZpbGVVUkxUb1BhdGgobmV3IFVSTCgnLi4vLi4nLCBpbXBvcnQubWV0YS51cmwpKSxcbiAgICAgICctLWdsb2JhbCcsXG4gICAgICAnLS15ZXMnLFxuICAgICAgJy0tc2tpbGwnLFxuICAgICAgJyonLFxuICAgICAgJy0tYWdlbnQnLFxuICAgICAgJ2NsYXVkZS1jb2RlJyxcbiAgICAgICctLWFnZW50JyxcbiAgICAgICdjb2RleCcsXG4gICAgICAnLS1hZ2VudCcsXG4gICAgICAnZ2VtaW5pLWNsaScsXG4gICAgXSxcbiAgICB7XG4gICAgICB3YWl0TWVzc2FnZTogJ0luc3RhbGxpbmcgcGFja2FnZWQgc2tpbGxzIGdsb2JhbGx5LicsXG4gICAgfVxuICApO1xufVxuIiwiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyBDb21tYW5kLCBPcHRpb24gfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHtcbiAgY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZSxcbiAgZGlzcGxheUFnZW50TmFtZSxcbiAgcnVuQWdlbnRDb21tYW5kLFxuICBydW5BbGxBZ2VudENvbW1hbmRzLFxufSBmcm9tICcuL2FnZW50L2FnZW50Q29tbWFuZHMuanMnO1xuaW1wb3J0IHtcbiAgY2hlY2tQckNpLFxuICBmZXRjaElzc3VlTWVzc2FnZXMsXG4gIGZldGNoUHJNZXNzYWdlcyxcbiAgbGlzdFByUmV2aWV3VGhyZWFkcyxcbiAgbm9ybWFsaXplSXNzdWVOdW1iZXIsXG4gIG9wZW5QcixcbiAgcmVhZFJlcGxpZXNGcm9tU3RkaW4sXG4gIHJlYWRSZXF1aXJlZFN0ZGluVGV4dCxcbiAgcmVhZFN0ZGluVGV4dCxcbiAgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyxcbiAgdXBkYXRlUHIsXG59IGZyb20gJy4vcHIvcHJDb21tYW5kcy5qcyc7XG5pbXBvcnQgeyBidWlsZFBsYW5Qcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvcGxhblByb21wdC5qcyc7XG5pbXBvcnQgeyBidWlsZFJldmlld1Byb21wdCB9IGZyb20gJy4vcHJvbXB0cy9yZXZpZXdQcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRTY3JlZW5zaG90UHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3NjcmVlbnNob3RQcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRTaW1wbGlmeVByb21wdCB9IGZyb20gJy4vcHJvbXB0cy9zaW1wbGlmeVByb21wdC5qcyc7XG5pbXBvcnQgeyBpbnN0YWxsUGFja2VkU2tpbGxzIH0gZnJvbSAnLi9za2lsbHMvaW5zdGFsbFNraWxscy5qcyc7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtLm5hbWUoJ2FnZW50LXNraWxscycpLmRlc2NyaXB0aW9uKCdDTEkgY29tbWFuZHMgZm9yIHRoZSBza2lsbHMgaW4gdGhpcyByZXBvc2l0b3J5Jykuc2hvd0hlbHBBZnRlckVycm9yKCk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2luc3RhbGwtc2tpbGxzJylcbiAgLmRlc2NyaXB0aW9uKCdJbnN0YWxsIGFsbCBwYWNrYWdlZCBza2lsbHMgZ2xvYmFsbHkgZm9yIENsYXVkZSBDb2RlLCBDb2RleCwgYW5kIEdlbWluaSBDTEknKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGluc3RhbGxQYWNrZWRTa2lsbHMoKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnRG9uZVxcbicpO1xuICB9KTtcblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdyZXZpZXcnLFxuICBkZXNjcmlwdGlvbjogJ1J1biByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2ggd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhIHJldmlldyBhZ2VudCcsXG4gIGNob2ljZXM6IFsnYWxsJywgJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgcnVuOiAobW9kZSkgPT5cbiAgICBtb2RlID09PSAnYWxsJ1xuICAgICAgPyBydW5BbGxBZ2VudENvbW1hbmRzKGJ1aWxkUmV2aWV3UHJvbXB0KCksIHtcbiAgICAgICAgICBhbGxBZ2VudHNMYWJlbDogJ3JldmlldyBhZ2VudHMnLFxuICAgICAgICAgIG1hcE91dHB1dDogKGFnZW50LCBvdXRwdXQpID0+IHtcbiAgICAgICAgICAgIGlmIChjb250YWluc05vQ29uY2VyblNlbnRlbmNlKG91dHB1dCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBgIyMgJHtkaXNwbGF5QWdlbnROYW1lKGFnZW50KX1cXG5cXG4ke291dHB1dH1gO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICA6IHJ1bkFnZW50Q29tbWFuZChtb2RlLCBidWlsZFJldmlld1Byb21wdCgpKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1jb2RleCcsICdSdW4gQ29kZXggcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjb2RleCcsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctZ2VtaW5pJywgJ1J1biBHZW1pbmkgQ0xJIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnZ2VtaW5pJywgYnVpbGRSZXZpZXdQcm9tcHQoKSlcbik7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAncGxhbicsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZSB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgcGxhbm5pbmcgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2FsbCcsICdjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChtb2RlLCBpc3N1ZVJlZmVyZW5jZSkgPT5cbiAgICBtb2RlID09PSAnYWxsJ1xuICAgICAgPyBydW5BbGxBZ2VudENvbW1hbmRzKGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpLCB7XG4gICAgICAgICAgYWxsQWdlbnRzTGFiZWw6ICdwbGFubmluZyBhZ2VudHMnLFxuICAgICAgICB9KVxuICAgICAgOiBydW5BZ2VudENvbW1hbmQobW9kZSwgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSkpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgncGxhbi1jb2RleCcsICdSdW4gQ29kZXggcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlJywge1xuICBhcmd1bWVudE5hbWU6ICc8aXNzdWU+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJyxcbiAgcnVuOiAoaXNzdWVSZWZlcmVuY2UpID0+IHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcbmFkZEFnZW50Q29tbWFuZCgncGxhbi1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZScsIHtcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKGlzc3VlUmVmZXJlbmNlKSA9PiBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpKSxcbn0pO1xuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWdlbWluaScsICdSdW4gR2VtaW5pIENMSSBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSkgPT4gcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnc2NyZWVuc2hvdCcpXG4gIC5kZXNjcmlwdGlvbignVGFrZSBhIHNjcmVlbnNob3Qgd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQgdmlhIHBsYXl3cmlnaHQtY2xpJylcbiAgLmFyZ3VtZW50KCc8aW5pdGlhbC11cmw+JywgJ0luaXRpYWwgVVJMIHRvIG9wZW4gYmVmb3JlIG5hdmlnYXRpbmcnKVxuICAuYXJndW1lbnQoJzxwYWdlLW5hbWU+JywgJ1BhZ2UgbmFtZSB0byBuYXZpZ2F0ZSB0byBmcm9tIHRoZSBpbml0aWFsIHBhZ2UnKVxuICAuYXJndW1lbnQoJzxkZXNjcmlwdGlvbj4nLCAnRGVzY3JpcHRpb24gb2YgdGhlIHBhcnQgdG8gY2FwdHVyZSBpbiB0aGUgc2NyZWVuc2hvdCcpXG4gIC5hZGRPcHRpb24oXG4gICAgbmV3IE9wdGlvbignLS1hZ2VudCA8YWdlbnQ+JywgJ1VzZSBhIHNjcmVlbnNob3QgYWdlbnQnKS5jaG9pY2VzKFsnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddKS5tYWtlT3B0aW9uTWFuZGF0b3J5KClcbiAgKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oXG4gICAgYXN5bmMgKFxuICAgICAgaW5pdGlhbFVybDogc3RyaW5nLFxuICAgICAgcGFnZU5hbWU6IHN0cmluZyxcbiAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgICBvcHRpb25zOiB7IGFnZW50OiAnY29kZXgnIHwgJ2NsYXVkZScgfCAnZ2VtaW5pJyB9XG4gICAgKSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShcbiAgICAgICAgYXdhaXQgcnVuQWdlbnRDb21tYW5kKG9wdGlvbnMuYWdlbnQsIGJ1aWxkU2NyZWVuc2hvdFByb21wdChpbml0aWFsVXJsLCBwYWdlTmFtZSwgZGVzY3JpcHRpb24pKVxuICAgICAgKTtcbiAgICB9XG4gICk7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAnc2ltcGxpZnknLFxuICBkZXNjcmlwdGlvbjogJ1J1biBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgc2ltcGxpZnkgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgcnVuOiAoYWdlbnQpID0+IHJ1bkFnZW50Q29tbWFuZChhZ2VudCwgYnVpbGRTaW1wbGlmeVByb21wdCgpKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWNvZGV4JywgJ1J1biBDb2RleCBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjbGF1ZGUnLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ29wZW4tcHInKVxuICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIHB1bGwgcmVxdWVzdCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoJylcbiAgLmFyZ3VtZW50KCc8dGl0bGU+JywgJ1B1bGwgcmVxdWVzdCB0aXRsZScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAodGl0bGU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZWFkU3RkaW5UZXh0KCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgb3BlblByKHsgYm9keTogYm9keSB8fCB1bmRlZmluZWQsIHRpdGxlIH0pO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAke291dHB1dH1cXG5gKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3VwZGF0ZS1wcicpXG4gIC5kZXNjcmlwdGlvbignVXBkYXRlIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCB0aXRsZSBhbmQgYm9keScpXG4gIC5hcmd1bWVudCgnPHRpdGxlPicsICdQdWxsIHJlcXVlc3QgdGl0bGUnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKHRpdGxlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVhZFJlcXVpcmVkU3RkaW5UZXh0KCdFcnJvcjogUFIgYm9keSBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHVwZGF0ZVByKHsgYm9keSwgdGl0bGUgfSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7b3V0cHV0fVxcbmApO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnY2hlY2stcHItY2knKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgdGhlIGxhdGVzdCB0ZXN0LXJlbGF0ZWQgQ0kgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja1ByQ2koKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShyZXN1bHQub3V0cHV0KTtcbiAgICBwcm9jZXNzLmV4aXQocmVzdWx0LmV4aXRDb2RlKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2ZldGNoLWlzc3VlJylcbiAgLmRlc2NyaXB0aW9uKCdGZXRjaCBhbiBpc3N1ZSBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBhcyBZQU1MJylcbiAgLmFyZ3VtZW50KCc8aXNzdWU+JywgJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChpc3N1ZVJlZmVyZW5jZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlUmVmZXJlbmNlKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnZmV0Y2gtcHInKVxuICAuZGVzY3JpcHRpb24oJ0ZldGNoIGEgcHVsbCByZXF1ZXN0IGJvZHkgYW5kIHRpbWVsaW5lIG1lc3NhZ2VzIGFzIFlBTUwsIGV4Y2x1ZGluZyBpbmxpbmUgY29tbWVudHMnKVxuICAuYXJndW1lbnQoJ1twcl0nLCAnR2l0SHViIHB1bGwgcmVxdWVzdCBudW1iZXIgb3IgVVJMOyBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBicmFuY2ggcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChwclJlZmVyZW5jZT86IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZldGNoUHJNZXNzYWdlcyhwclJlZmVyZW5jZSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2xpc3QtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBsaXN0UHJSZXZpZXdUaHJlYWRzKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3Jlc29sdmUtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ1JlcGx5IHRvIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMgYW5kIHJlc29sdmUgdGhlbScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVwbGllcyA9IGF3YWl0IHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxuYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHByb2Nlc3MuYXJndik7XG5cbmZ1bmN0aW9uIGFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQ8VE1vZGUgZXh0ZW5kcyBzdHJpbmc+KGNvbmZpZzoge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIG9wdGlvbkRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNob2ljZXM6IFtUTW9kZSwgLi4uVE1vZGVbXV07XG4gIGFyZ3VtZW50TmFtZT86IHN0cmluZztcbiAgYXJndW1lbnREZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcnVuOiAobW9kZTogVE1vZGUsIGFyZ3VtZW50OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPjtcbn0pOiB2b2lkIHtcbiAgY29uc3QgY29tbWFuZCA9IHByb2dyYW0uY29tbWFuZChjb25maWcubmFtZSkuZGVzY3JpcHRpb24oY29uZmlnLmRlc2NyaXB0aW9uKS5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSk7XG4gIGlmIChjb25maWcuYXJndW1lbnROYW1lKSB7XG4gICAgY29tbWFuZC5hcmd1bWVudChjb25maWcuYXJndW1lbnROYW1lLCBjb25maWcuYXJndW1lbnREZXNjcmlwdGlvbik7XG4gIH1cblxuICBjb21tYW5kXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFnZW50IDxhZ2VudD4nLCBjb25maWcub3B0aW9uRGVzY3JpcHRpb24pLmNob2ljZXMoY29uZmlnLmNob2ljZXMpLm1ha2VPcHRpb25NYW5kYXRvcnkoKSlcbiAgICAuYWN0aW9uKGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgIGNvbnN0IFthcmd1bWVudE9yT3B0aW9ucywgbWF5YmVPcHRpb25zXSA9IGFyZ3MgYXMgW3N0cmluZyB8IHsgYWdlbnQ6IFRNb2RlIH0sIHsgYWdlbnQ6IFRNb2RlIH0gfCB1bmRlZmluZWRdO1xuICAgICAgY29uc3QgYXJndW1lbnQgPSB0eXBlb2YgYXJndW1lbnRPck9wdGlvbnMgPT09ICdzdHJpbmcnID8gYXJndW1lbnRPck9wdGlvbnMgOiAnJztcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSAodHlwZW9mIGFyZ3VtZW50T3JPcHRpb25zID09PSAnc3RyaW5nJyA/IG1heWJlT3B0aW9ucyA6IGFyZ3VtZW50T3JPcHRpb25zKSBhcyB7IGFnZW50OiBUTW9kZSB9O1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnLnJ1bihvcHRpb25zLmFnZW50LCBhcmd1bWVudCkpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRBZ2VudENvbW1hbmQoXG4gIG5hbWU6IHN0cmluZyxcbiAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgY29uZmlnT3JSdW46XG4gICAgfCAoKCkgPT4gUHJvbWlzZTxzdHJpbmc+KVxuICAgIHwge1xuICAgICAgICBhcmd1bWVudE5hbWU6IHN0cmluZztcbiAgICAgICAgYXJndW1lbnREZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAgICAgcnVuOiAoYXJndW1lbnQ6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xuICAgICAgfVxuKTogdm9pZCB7XG4gIGNvbnN0IGNvbW1hbmQgPSBwcm9ncmFtLmNvbW1hbmQobmFtZSkuZGVzY3JpcHRpb24oZGVzY3JpcHRpb24pLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKTtcblxuICBpZiAodHlwZW9mIGNvbmZpZ09yUnVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29tbWFuZC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnT3JSdW4oKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29tbWFuZC5hcmd1bWVudChjb25maWdPclJ1bi5hcmd1bWVudE5hbWUsIGNvbmZpZ09yUnVuLmFyZ3VtZW50RGVzY3JpcHRpb24pLmFjdGlvbihhc3luYyAoYXJndW1lbnQ6IHN0cmluZykgPT4ge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZ09yUnVuLnJ1bihhcmd1bWVudCkpO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJQUk9DRVNTX0NMRUFOVVBfU0lHTkFMUyIsImFjdGl2ZVByb2Nlc3NlcyIsIlNldCIsImNsZWFudXBIYW5kbGVyc0luc3RhbGxlZCIsInJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MiLCJfeCIsIl94MiIsIl9ydW5Db21tYW5kV2l0aFByb2dyZXNzIiwiYXBwbHkiLCJ0aGlzIiwiYXJndW1lbnRzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3IiLCJtIiwiX2NhbGxlZSIsImNvbW1hbmQiLCJvcHRpb25zIiwiX2NvbW1hbmQkIiwicHJvYyIsInByb2Nlc3NUaW1lb3V0Iiwic3RvcFdhaXRQcm9ncmVzcyIsImNvbW1hbmRMb2dnZXIiLCJfeWllbGQkUHJvbWlzZSRhbGwiLCJfeWllbGQkUHJvbWlzZSRhbGwyIiwic3Rkb3V0Iiwic3RkZXJyIiwiZXhpdENvZGUiLCJvdXRwdXQiLCJ3IiwiX2NvbnRleHQiLCJwIiwibiIsInNwYXduIiwic2xpY2UiLCJkZXRhY2hlZCIsInN0ZGlvIiwiY3JlYXRlUHJvY2Vzc1RpbWVvdXQiLCJ0aW1lb3V0TXMiLCJjcmVhdGVXYWl0UHJvZ3Jlc3MiLCJ3YWl0TWVzc2FnZSIsIndhaXRJbnRlcnZhbFNlY29uZHMiLCJjcmVhdGVDb21tYW5kTG9nZ2VyIiwibG9nRmlsZVBhdGgiLCJ2IiwiUHJvbWlzZSIsImFsbCIsInN0cmVhbVRvVGV4dCIsImNodW5rIiwid3JpdGUiLCJyZXNvbHZlIiwicmVqZWN0Iiwib25jZSIsImNvZGUiLCJfc2xpY2VkVG9BcnJheSIsInRpbWVkT3V0IiwiRXJyb3IiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwiY29uY2F0IiwiYSIsImpvaW4iLCJjbG9zZSIsImNsZWFyIiwiZiIsIm1lc3NhZ2UiLCJtaWxsaXNlY29uZHMiLCJmb3JtYXREdXJhdGlvbiIsImxlbmd0aCIsImZvcmNlS2lsbFRpbWVyIiwiYWRkIiwiX3N0ZXAyIiwiX2l0ZXJhdG9yMiIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX2xvb3AiLCJzaWduYWwiLCJ2YWx1ZSIsInByb2Nlc3MiLCJfc3RlcDMiLCJfaXRlcmF0b3IzIiwicyIsImRvbmUiLCJraWxsUHJvY2VzcyIsImVyciIsImUiLCJleGl0Iiwic2lnbmFsTnVtYmVyIiwiaW5zdGFsbENsZWFudXBIYW5kbGVycyIsInRpbWVvdXQiLCJzZXRUaW1lb3V0IiwidW5yZWYiLCJjbGVhclRpbWVvdXQiLCJwaWQiLCJraWxsIiwiX3VudXNlZCIsIl94MyIsIl94NCIsIl9zdHJlYW1Ub1RleHQiLCJfY2FsbGVlMiIsInN0cmVhbSIsIm9uQ2h1bmsiLCJjaHVua3MiLCJkZWNvZGVyIiwiX2l0ZXJhdG9yQWJydXB0Q29tcGxldGlvbiIsIl9kaWRJdGVyYXRvckVycm9yIiwiX2l0ZXJhdG9yRXJyb3IiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImNodW5rVGV4dCIsImZpbmFsQ2h1bmsiLCJfdCIsIl9jb250ZXh0MiIsIlRleHREZWNvZGVyIiwiX2FzeW5jSXRlcmF0b3IiLCJuZXh0IiwiZGVjb2RlIiwiVWludDhBcnJheSIsInB1c2giLCJ3cml0ZVByb2dyZXNzIiwiZG90Q291bnQiLCJ0aW1lciIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsIl94NSIsIl9jcmVhdGVDb21tYW5kTG9nZ2VyIiwiX2NhbGxlZTYiLCJ3YXJuIiwiX3QyIiwiX2NvbnRleHQ2IiwiX2Nsb3NlIiwiX2NhbGxlZTMiLCJfY29udGV4dDMiLCJlcnJvciIsIlN0cmluZyIsIm1rZGlyIiwiZGlybmFtZSIsInJlY3Vyc2l2ZSIsImNyZWF0ZVdyaXRlU3RyZWFtIiwiZmxhZ3MiLCJvbiIsIndyaXRhYmxlIiwiX2Nsb3NlMiIsIl9jYWxsZWU0IiwiX2NvbnRleHQ0IiwiZW5kIiwiX2Nsb3NlMyIsIl9jYWxsZWU1IiwiX2NvbnRleHQ1IiwiTk9fQ09OQ0VSTl9NRVNTQUdFIiwiQUdFTlRfTkFNRVMiLCJDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYIiwiUmVnRXhwIiwicnVuQWxsQWdlbnRDb21tYW5kcyIsIl9ydW5BbGxBZ2VudENvbW1hbmRzIiwicHJvbXB0IiwicmVzb2x2ZWRQcm9tcHQiLCJvdXRwdXRzIiwiYWxsQWdlbnRzTGFiZWwiLCJ3YWl0TWVzc2FnZUZvciIsIm1hcCIsImFnZW50IiwiX29wdGlvbnMkbWFwT3V0cHV0IiwiX29wdGlvbnMkbWFwT3V0cHV0MiIsIl9vcHRpb25zIiwicnVuQWdlbnRDb21tYW5kIiwidHJpbSIsIm1hcE91dHB1dCIsImNhbGwiLCJkaXNwbGF5QWdlbnROYW1lIiwiZmlsdGVyIiwidW5kZWZpbmVkIiwiX3J1bkFnZW50Q29tbWFuZCIsIl90MyIsImNyZWF0ZUFnZW50Q29tbWFuZCIsImFnZW50TG9nRmlsZVBhdGgiLCJ0YXJnZXQiLCJub3ciLCJEYXRlIiwiX21hcDIiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwidHdvRGlnaXRzIiwibW9udGgiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwidG9TdHJpbmciLCJwYWRTdGFydCIsInlhbWxTdHJpbmdpZnlPcHRpb25zIiwiYmxvY2tRdW90ZSIsImxpbmVXaWR0aCIsInByb2dyZXNzIiwicHJvY2Vzc1N0ZGVyciIsImV4aXRXaXRoRXJyb3IiLCJyZWFkU3RkaW5UZXh0IiwiX3JlYWRTdGRpblRleHQiLCJwcm9jZXNzU3RkaW4iLCJpc1RUWSIsInJlYWRSZXF1aXJlZFN0ZGluVGV4dCIsIl9yZWFkUmVxdWlyZWRTdGRpblRleHQiLCJlcnJvck1lc3NhZ2UiLCJpbnB1dCIsInJ1bkNvbW1hbmQiLCJfcnVuQ29tbWFuZCIsIl9vcHRpb25zJGFsbG93ZWRFeGl0QyIsImFsbG93ZWRFeGl0Q29kZXMiLCJfcmV0IiwiYXR0ZW1wdCIsIl9jb21tYW5kJDIiLCJmYWlsdXJlTWVzc2FnZSIsInJldHJ5Iiwic3RkaW5EYXRhIiwic3RkaW4iLCJpbmNsdWRlcyIsImlzVHJhbnNpZW50R2hGYWlsdXJlIiwiR0hfUkVUUllfTUFYX0FUVEVNUFRTIiwic2xlZXAiLCJkIiwiX3JlZ2VuZXJhdG9yVmFsdWVzIiwiZ2giLCJfZ2giLCJhcmdzIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiZ2hBbGxvd0V4aXRDb2RlcyIsIl94NiIsIl94NyIsIl94OCIsIl9naEFsbG93RXhpdENvZGVzIiwiY3VycmVudFJlcG9QYXJ0cyIsIl9jdXJyZW50UmVwb1BhcnRzIiwibmFtZVdpdGhPd25lciIsIl9uYW1lV2l0aE93bmVyJHNwbGl0IiwiX25hbWVXaXRoT3duZXIkc3BsaXQyIiwib3duZXIiLCJuYW1lIiwiX2NvbnRleHQ3Iiwic3BsaXQiLCJjdXJyZW50UHJOdW1iZXIiLCJfY3VycmVudFByTnVtYmVyIiwiX2NhbGxlZTciLCJfY29udGV4dDgiLCJncmFwaHFsIiwiX3g5IiwiX3gwIiwiX2dyYXBocWwiLCJfY2FsbGVlOCIsInF1ZXJ5IiwidmFycyIsIl9pIiwiX09iamVjdCRlbnRyaWVzIiwiX09iamVjdCRlbnRyaWVzJF9pIiwia2V5IiwicmVzcG9uc2UiLCJlcnJvck1lc3NhZ2VzIiwiX2NvbnRleHQ5IiwiT2JqZWN0IiwiZW50cmllcyIsIkpTT04iLCJwYXJzZSIsIkFycmF5IiwiaXNBcnJheSIsImVycm9ycyIsIl9lcnJvciRtZXNzYWdlIiwieWFtbER1bXAiLCJkYXRhIiwic3RyaW5naWZ5WWFtbCIsImRlZXBDb3B5Iiwic3RyaW5naWZ5Iiwic3Bhd25TeW5jU2FmZSIsIl9yZXN1bHQkc3RhdHVzIiwiX3Jlc3VsdCRzdGRvdXQiLCJfcmVzdWx0JHN0ZGVyciIsInJlc3VsdCIsInNwYXduU3luYyIsImVuY29kaW5nIiwic3RhdHVzIiwidGVzdCIsIlRFU1RfUkVMQVRFRF9QQVRURVJOIiwiV09SS0ZMT1dfUlVOX0pTT05fRklFTERTIiwiRkFJTEVEX0xPR19MSU5FX1BSRUZJWF9QQVRURVJOIiwicnRrQXZhaWxhYmxlIiwibGF0ZXN0UHJDaVJlc3VsdHMiLCJfbGF0ZXN0UHJDaVJlc3VsdHMiLCJwck51bWJlciIsIl9zdW1tYXJ5JHBhc3MiLCJfc3VtbWFyeSRmYWlsIiwiX3N1bW1hcnkkcGVuZGluZyIsIl9zdW1tYXJ5JHNraXBwaW5nIiwiX3N1bW1hcnkkY2FuY2VsIiwiY2hlY2tzIiwicmF3Iiwic3VtbWFyeSIsIlN5bnRheEVycm9yIiwicmVkdWNlIiwiY291bnRzIiwiY2hlY2siLCJfY2hlY2skYnVja2V0MiIsIl9jb3VudHMkYnVja2V0IiwiYnVja2V0IiwidG90YWwiLCJwYXNzIiwiZmFpbCIsInBlbmRpbmciLCJza2lwcGluZyIsImNhbmNlbCIsIndhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MiLCJfd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyIsInNsZWVwRm4iLCJsYXRlc3RDaVJlc3VsdHNGbiIsIndyaXRlUHJvZ3Jlc3NGbiIsImF0dGVtcHRzIiwiY2lSZXN1bHRzIiwiY2xhc3NpZmllZFJlc3VsdHMiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QyIiwiZmFpbGVkUmVzdWx0cyIsInJ1bm5pbmdSZXN1bHRzIiwic2xlZXBTZWNvbmRzIiwiY2xhc3NpZmllZExhdGVzdFJlc3VsdHMiLCJmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQiLCJrZXlzIiwibGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3ciLCJncm91cGVkUmVzdWx0cyIsIndvcmtmbG93S2V5Iiwid29ya2Zsb3ciLCJmcm9tRW50cmllcyIsIl9yZWYiLCJfbGF0ZXN0QXR0ZW1wdENoZWNrcyQiLCJfcmVmMiIsImxhdGVzdEF0dGVtcHRDaGVja3MiLCJncm91cHMiLCJncm91cGVkQ2hlY2tzIiwicnVuSWQiLCJ3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayIsIndvcmtmbG93QXR0ZW1wdEtleSIsImdyb3VwIiwiZ2V0Iiwic2V0IiwiTWFwIiwiZnJvbSIsInZhbHVlcyIsImxhdGVzdEdyb3VwIiwiY3VycmVudEdyb3VwIiwibGF0ZXN0R3JvdXBUaW1lc3RhbXAiLCJsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyIsImZpcnN0Q2hlY2siLCJsYXRlc3RDaGVjayIsImN1cnJlbnRMYXRlc3QiLCJsYXRlc3RDaGVja1RpbWVzdGFtcCIsImNsYXNzaWZpY2F0aW9uIiwid29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbiIsInNvbWUiLCJ0ZXN0UmVsYXRlZENoZWNrIiwiX2xpbmskbWF0Y2giLCJsaW5rIiwibWF0Y2giLCJ3b3JrZmxvd1J1biIsIl93b3JrZmxvd1J1biIsInJ1bkpzb24iLCJidWNrZXRzIiwiX2NoZWNrJGJ1Y2tldCIsIl9jaGVjayRzdGFydGVkQXQiLCJ0aW1lc3RhbXAiLCJjb21wbGV0ZWRBdCIsInN0YXJ0ZWRBdCIsIl9zbGVlcFNlY29uZHMiLCJzZWNvbmRzIiwiY2hlY2tQckNpIiwiX2NoZWNrUHJDaSIsIl95aWVsZCR3YWl0Rm9yUnVubmluZyIsIl95aWVsZCR3YWl0Rm9yUnVubmluZzIiLCJ3YWl0QXR0ZW1wdHMiLCJ3YWl0VGltZWRPdXQiLCJjbGFzc2lmaWVkTGF0ZXN0IiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0MyIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDQiLCJwYXlsb2FkIiwid2FpdGVkX2Zvcl90ZXN0X3JlbGF0ZWRfY2hlY2tzIiwidGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfYXR0ZW1wdHMiLCJ0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF90aW1lZF9vdXQiLCJfcmVmNCIsIl9yZWY2IiwiY29tcGFjdFdvcmtmbG93IiwiX3Q0IiwiX3Q1IiwiY29tcGFjdFdvcmtmbG93UmVzdWx0IiwiX29iamVjdFNwcmVhZCIsImJ1aWxkRmFpbGVkV29ya2Zsb3dEZXRhaWxzIiwiZmFpbGVkV29ya2Zsb3dMb2ciLCJmYWlsZWRfd29ya2Zsb3dzIiwidGVzdF93b3JrZmxvd19vdXRwdXQiLCJfcmVmNyIsIl9yZWY4IiwicnVubmluZ190ZXN0X3JlbGF0ZWRfd29ya2Zsb3dzIiwibGF0ZXN0IiwiX2NvbXBhY3RXb3JrZmxvd1Jlc3VsdCIsIl9zdHJpbmdPclVuZGVmaW5lZCIsInJ1biIsImZhaWxlZEpvYiIsImZhaWxlZFdvcmtmbG93UnVuSm9iIiwic3RyaW5nT3JVbmRlZmluZWQiLCJqb2IiLCJqb2JfdXJsIiwidXJsIiwiZmFpbGVkX3N0ZXAiLCJmYWlsZWRXb3JrZmxvd1J1blN0ZXBOYW1lIiwicnVuX2lkIiwicnVuX3VybCIsImJyYW5jaCIsImhlYWRCcmFuY2giLCJzaGEiLCJoZWFkU2hhIiwiY29uY2x1c2lvbiIsIl9mYWlsZWRXb3JrZmxvd0xvZyIsImxvZyIsImZhaWxlZF9sb2ciLCJyZWZpbmVGYWlsZWRXb3JrZmxvd0xvZyIsInNhbml0aXplZElucHV0Iiwic2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyIsInN0cmlwVlRDb250cm9sQ2hhcmFjdGVycyIsImxpbmUiLCJyZXBsYWNlIiwiam9iTmFtZSIsIl9yZWYzIiwiX3J1biRqb2JzJGZpbmQiLCJqb2JzIiwiZmluZCIsIl9qb2Ikc3RlcHMkZmluZCRuYW1lIiwiX2pvYiRzdGVwcyRmaW5kIiwiX2pvYiRzdGVwcyRmaW5kMiIsInN0ZXBzIiwic3RlcCIsImN1cnJlbnRCYXNlQnJhbmNoIiwiX2N1cnJlbnRCYXNlQnJhbmNoIiwiX3lpZWxkJGN1cnJlbnRQdWxsUmVxIiwiY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCIsImN1cnJlbnREZWZhdWx0QnJhbmNoIiwiX2N1cnJlbnREZWZhdWx0QnJhbmNoIiwicmVxdWlyZU5vbkVtcHR5IiwiX2N1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2giLCJiYXNlQnJhbmNoIiwiaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nIiwibm9ybWFsaXplSXNzdWVOdW1iZXIiLCJyZWZlcmVuY2UiLCJleHRyYWN0R2l0SHViUmVmZXJlbmNlTnVtYmVyIiwibm9ybWFsaXplUHJOdW1iZXIiLCJmZXRjaElzc3VlTWVzc2FnZXMiLCJfZmV0Y2hJc3N1ZU1lc3NhZ2VzIiwiaXNzdWVOdW1iZXIiLCJfeWllbGQkY3VycmVudFJlcG9QYXIiLCJfeWllbGQkY3VycmVudFJlcG9QYXIyIiwiaXNzdWUiLCJpc3N1ZU1lc3NhZ2VzIiwibnVtYmVyIiwiZmV0Y2hQck1lc3NhZ2VzIiwiX2ZldGNoUHJNZXNzYWdlcyIsInJlc29sdmVkUHJOdW1iZXIiLCJwdWxsUmVxdWVzdCIsImN1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyIsInB1bGxfcmVxdWVzdCIsImZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSIsIl9mZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUiLCJwck51bWJlck91dHB1dCIsIl9jdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMiLCJfeWllbGQkY3VycmVudFJlcG9QYXIzIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyNCIsInByTWVzc2FnZXMiLCJsYWJlbCIsInJlZmVyZW5jZVRleHQiLCJraW5kU2VnbWVudCIsIl9pc3N1ZU1lc3NhZ2VzIiwibWVzc2FnZXMiLCJmZXRjaE1ldGFkYXRhIiwibm91biIsInNlbGVjdE1ldGFkYXRhIiwiX3Jlc3BvbnNlJGRhdGEiLCJyZXBvc2l0b3J5IiwicGFnaW5hdGVNZXNzYWdlcyIsInNlbGVjdENvbm5lY3Rpb24iLCJfcmVzcG9uc2UkZGF0YTIiLCJjb21tZW50cyIsIm1hcE5vZGUiLCJjb21tZW50TWVzc2FnZSIsIl9wck1lc3NhZ2VzIiwiaXNzdWVDb21tZW50cyIsInJldmlld3MiLCJfcmVzcG9uc2UkZGF0YTMiLCJwcklzc3VlQ29tbWVudHMiLCJwclJldmlld3MiLCJzb3J0IiwiY29tcGFyZU1lc3NhZ2VzQnlDcmVhdGVkQXQiLCJsZWZ0IiwicmlnaHQiLCJsZWZ0Q3JlYXRlZEF0IiwiY3JlYXRlZEF0IiwicmlnaHRDcmVhdGVkQXQiLCJsb2NhbGVDb21wYXJlIiwiX3gxIiwiX3gxMCIsIl9wcklzc3VlQ29tbWVudHMiLCJfcmVzcG9uc2UkZGF0YTQiLCJfeDExIiwiX3gxMiIsIl94MTMiLCJfcHJSZXZpZXdzIiwiX3Jlc3BvbnNlJGRhdGE1IiwicmV2aWV3TWVzc2FnZSIsIl94MTQiLCJfcGFnaW5hdGVNZXNzYWdlcyIsIl9jYWxsZWU5IiwiY29uZmlnIiwiY3Vyc29yIiwiX2Nvbm5lY3Rpb24kcGFnZUluZm8kIiwiY29ubmVjdGlvbiIsIk51bWJlciIsIm5vZGVzIiwiaGFzTWVzc2FnZUJvZHkiLCJwYWdlSW5mbyIsImhhc05leHRQYWdlIiwiZW5kQ3Vyc29yIiwiX3gxNSIsIl9mZXRjaE1ldGFkYXRhIiwiX2NhbGxlZTAiLCJfbWV0YWRhdGEkYXV0aG9yJGxvZ2kiLCJfbWV0YWRhdGEkYXV0aG9yIiwiX21ldGFkYXRhJGJvZHkiLCJtZXRhZGF0YSIsIl9jb250ZXh0MCIsInRpdGxlIiwiYXV0aG9yIiwibG9naW4iLCJib2R5IiwiY29tbWVudCIsIl9jb21tZW50JGF1dGhvciRsb2dpbiIsIl9jb21tZW50JGF1dGhvciIsInR5cGUiLCJyZXZpZXciLCJfcmV2aWV3JGF1dGhvciRsb2dpbiIsIl9yZXZpZXckYXV0aG9yIiwiX3JldmlldyRzdGF0ZSIsIl9yZXZpZXckc3VibWl0dGVkQXQiLCJfcmV2aWV3JGJvZHkiLCJzdGF0ZSIsInN1Ym1pdHRlZEF0Iiwib3BlblByIiwiX29wZW5QciIsIl90ZW1wIiwiaGVhZCIsImJhc2UiLCJjcmVhdGVBcmdzIiwidXBkYXRlUHIiLCJfdXBkYXRlUHIiLCJlZGl0UHIiLCJfZWRpdFByIiwiZWRpdEFyZ3MiLCJyZWFkUmVwbGllc0Zyb21TdGRpbiIsIl9yZWFkUmVwbGllc0Zyb21TdGRpbiIsIm5vcm1hbGl6ZWRSZXBsaWVzIiwidGhyZWFkSWQiLCJwYXJzZVJlcGx5SW5wdXQiLCJyZXBsaWVzIiwicGFnaW5hdGVSZXZpZXdUaHJlYWRzIiwiX3BhZ2luYXRlUmV2aWV3VGhyZWFkcyIsIm9uVGhyZWFkIiwiX3lpZWxkJGdyYXBocWwkZGF0YSIsIl9yZXZpZXdUaHJlYWRzJHBhZ2VJbiIsInJldmlld1RocmVhZHMiLCJ0aHJlYWQiLCJ1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzIiwiX3VucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMiLCJpZHMiLCJpc1Jlc29sdmVkIiwiaWQiLCJ1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyIsIl91bnJlc29sdmVkUmV2aWV3VGhyZWFkcyIsInRocmVhZHMiLCJfcGFnZUluZm8kZW5kQ3Vyc29yIiwiX3lpZWxkJGdyYXBocWwkZGF0YTIiLCJfcGFnZUluZm8kZW5kQ3Vyc29yMiIsImNvbW1lbnRDb25uZWN0aW9uIiwiX3Q2IiwiX3Q3IiwiX3Q4Iiwibm9ybWFsaXplQ29tbWVudEF1dGhvciIsIm5vZGUiLCJpc091dGRhdGVkIiwicGF0aCIsIm9yaWdpbmFsTGluZSIsInN0YXJ0TGluZSIsIm9yaWdpbmFsU3RhcnRMaW5lIiwibGlzdFByUmV2aWV3VGhyZWFkcyIsIl9saXN0UHJSZXZpZXdUaHJlYWRzIiwiX3Q5IiwiX3QwIiwidW5yZXNvbHZlZF90aHJlYWRzIiwicmVzb2x2ZVByUmV2aWV3VGhyZWFkcyIsIl9yZXNvbHZlUHJSZXZpZXdUaHJlYWRzIiwidW5yZXNvbHZlZElkcyIsInJlc29sdmVkVGhyZWFkSWRzIiwiX3N0ZXAyJHZhbHVlIiwiaW5kZXgiLCJfc3RlcDIkdmFsdWUkIiwiX3QxIiwiX3QxMCIsIl90MTEiLCJoYXMiLCJyZXNvbHZlUmV2aWV3VGhyZWFkIiwicmVzb2x2ZWRfdGhyZWFkX2lkcyIsInBhcnNlZCIsIl90eXBlb2YiLCJldmVyeSIsInJlcGx5IiwiaXNSZXBseUlucHV0IiwiYnVpbGRQbGFuUHJvbXB0IiwiX2J1aWxkUGxhblByb21wdCIsImlzc3VlWWFtbCIsImJ1aWxkTWVyZ2VCYXNlQ29tbWFuZCIsInNoZWxsUXVvdGUiLCJyZXBsYWNlQWxsIiwiYnVpbGRSZXZpZXdQcm9tcHQiLCJfYnVpbGRSZXZpZXdQcm9tcHQiLCJtZXJnZUJhc2VDb21tYW5kIiwicHJDb250ZXh0IiwiYnVpbGRQckNvbnRleHRJbnN0cnVjdGlvbnMiLCJidWlsZFNjcmVlbnNob3RQcm9tcHQiLCJpbml0aWFsVXJsIiwicGFnZU5hbWUiLCJzY3JlZW5zaG90RGVzY3JpcHRpb24iLCJzYW5pdGl6ZWREZXNjcmlwdGlvbiIsImJ1aWxkU2ltcGxpZnlQcm9tcHQiLCJfYnVpbGRTaW1wbGlmeVByb21wdCIsImluc3RhbGxQYWNrZWRTa2lsbHMiLCJfaW5zdGFsbFBhY2tlZFNraWxscyIsImZpbGVVUkxUb1BhdGgiLCJVUkwiLCJwcm9ncmFtIiwiQ29tbWFuZCIsImFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQiLCJkZXNjcmlwdGlvbiIsImFsbG93RXhjZXNzQXJndW1lbnRzIiwiYXJndW1lbnROYW1lIiwiYXJndW1lbnQiLCJhcmd1bWVudERlc2NyaXB0aW9uIiwiYWRkT3B0aW9uIiwiT3B0aW9uIiwib3B0aW9uRGVzY3JpcHRpb24iLCJjaG9pY2VzIiwibWFrZU9wdGlvbk1hbmRhdG9yeSIsImFjdGlvbiIsIl9sZW4iLCJfa2V5IiwiX3JlZjEwIiwiYXJndW1lbnRPck9wdGlvbnMiLCJtYXliZU9wdGlvbnMiLCJfYXJnczAiLCJhZGRBZ2VudENvbW1hbmQiLCJjb25maWdPclJ1biIsIl9jYWxsZWUxMCIsIl9jb250ZXh0MTAiLCJfY2FsbGVlMSIsIl9jb250ZXh0MSIsInNob3dIZWxwQWZ0ZXJFcnJvciIsIm1vZGUiLCJjb250YWluc05vQ29uY2VyblNlbnRlbmNlIiwiaXNzdWVSZWZlcmVuY2UiLCJwclJlZmVyZW5jZSIsInBhcnNlQXN5bmMiLCJhcmd2Il0sIm1hcHBpbmdzIjoiOzs7bXpIQWdCTyxJQUtEQSxFQUEwQixDQUFDLFNBQVUsVUFBVyxVQUNoREMsRUFBa0IsSUFBSUMsSUFDeEJDLEdBQTJCLEVBSS9CLFNBQXNCQyxFQUFzQkMsRUFBQUMsR0FBQSxPQUFBQyxFQUFBQyxNQUFBQyxLQUFBQyxVQUFBLENBa0MzQyxTQUFBSCxJQUFBLE9BQUFBLEVBQUFJLEVBQUFDLElBQUFDLEVBbENNLFNBQUFDLEVBQXNDQyxFQUFtQkMsR0FBMEIsSUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQSxPQUFBZixJQUFBZ0IsRUFBQSxTQUFBQyxHQUFBLGNBQUFBLEVBQUFDLEVBQUFELEVBQUFFLEdBQUEsS0FBQSxFQU1LLFlBTkwsSUFBMUJmLElBQUFBLEVBQTZCLENBQUEsR0FDckZFLEVBQU9jLEVBQWdCLE9BQVhmLEVBQUNGLEVBQVEsSUFBRUUsRUFBSSxHQUFJRixFQUFRa0IsTUFBTSxHQUFJLENBQ3JEQyxVQUFVLEVBQ1ZDLE1BQU8sQ0FBQyxTQUFVLE9BQVEsVUFFdEJoQixFQUFpQmlCLEVBQXFCbEIsRUFBTUYsRUFBUXFCLFdBQ3BEakIsRUFBbUJrQixFQUFtQnRCLEVBQVF1QixZQUFhdkIsRUFBUXdCLHFCQUFvQlgsRUFBQUUsRUFBQSxFQUNqRVUsRUFBb0J6QixFQUFRMEIsYUFBWSxLQUFBLEVBQWpELE9BQWJyQixFQUFhUSxFQUFBYyxFQUFBZCxFQUFBQyxFQUFBLEVBQUFELEVBQUFFLEVBQUEsRUFHd0JhLFFBQVFDLElBQUksQ0FDbkRDLEVBQWE1QixFQUFLTSxPQUFRLFNBQUN1QixHQUFLLE9BQUsxQixFQUFjMkIsTUFBTUQsRUFBTSxHQUMvREQsRUFBYTVCLEVBQUtPLE9BQVEsU0FBQ3NCLEdBQUssT0FBSzFC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
|
package/package.json
CHANGED
package/skills/wbfy/SKILL.md
CHANGED
|
@@ -11,9 +11,10 @@ allowed-tools: Bash(bun:*), Bash(gh:*), Bash(git:*), Bash(yarn:*)
|
|
|
11
11
|
2. Run `yarn start <root_path_of_target_repo>` inside `~/ghq/github.com/WillBooster/wbfy`.
|
|
12
12
|
3. Run either `yarn check-for-ai` or `bun check-for-ai` in the target repository (do not run this within the `wbfy` directory).
|
|
13
13
|
4. If any checks fail, resolve them using one of the following methods:
|
|
14
|
-
- If the failure originates in the target repository (e.g., existing code violates new linter rules), fix the issue there, commit and push the changes,
|
|
15
|
-
- If the failure is caused by configuration files modified by `wbfy` (e.g., a `wbfy`-edited `tsconfig.json` does not match the target repository), fix the issue in `~/ghq/github.com/WillBooster/wbfy`, commit and push the changes, open a PR in the `wbfy` repository,
|
|
16
|
-
- Ensure
|
|
14
|
+
- If the failure originates in the target repository (e.g., existing code violates new linter rules), fix the issue there, commit and push the changes, then return to step 3.
|
|
15
|
+
- If the failure is caused by configuration files modified by `wbfy` (e.g., a `wbfy`-edited `tsconfig.json` does not match the target repository), fix the issue in `~/ghq/github.com/WillBooster/wbfy`, commit and push the changes, open a PR in the `wbfy` repository, then return to step 2.
|
|
16
|
+
- Ensure `wbfy` generates the correct configuration files without manual adjustments, as all projects rely on its automation.
|
|
17
17
|
- Avoid ad-hoc hotfixes; prefer general and versatile solutions applicable to all projects.
|
|
18
|
+
- Add comments to the `wbfy` codebase to clarify the reasoning behind your fixes.
|
|
18
19
|
5. Commit and push the applied changes to the target repository, then run either the `open-pr` or `update-pr` skill.
|
|
19
20
|
- Since `wbfy` creates, modifies, and deletes multiple files in the target repository, verify that all changes are included in your commit.
|