@borgar/fx 4.13.0 → 5.0.0
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/index-BMr6cTgc.d.cts +1444 -0
- package/dist/index-BMr6cTgc.d.ts +1444 -0
- package/dist/index.cjs +3054 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2984 -0
- package/dist/index.js.map +1 -0
- package/dist/xlsx/index.cjs +3120 -0
- package/dist/xlsx/index.cjs.map +1 -0
- package/dist/xlsx/index.d.cts +55 -0
- package/dist/xlsx/index.d.ts +55 -0
- package/dist/xlsx/index.js +3049 -0
- package/dist/xlsx/index.js.map +1 -0
- package/docs/API.md +2959 -718
- package/docs/AST_format.md +2 -2
- package/eslint.config.mjs +40 -0
- package/lib/a1.spec.ts +32 -0
- package/lib/a1.ts +26 -0
- package/lib/addA1RangeBounds.ts +50 -0
- package/lib/addTokenMeta.spec.ts +166 -0
- package/lib/{addTokenMeta.js → addTokenMeta.ts} +53 -33
- package/lib/astTypes.ts +211 -0
- package/lib/cloneToken.ts +29 -0
- package/lib/{constants.js → constants.ts} +6 -3
- package/lib/fixRanges.spec.ts +220 -0
- package/lib/fixRanges.ts +260 -0
- package/lib/fromCol.spec.ts +15 -0
- package/lib/{fromCol.js → fromCol.ts} +1 -1
- package/lib/index.spec.ts +119 -0
- package/lib/index.ts +76 -0
- package/lib/isNodeType.ts +151 -0
- package/lib/isType.spec.ts +208 -0
- package/lib/{isType.js → isType.ts} +26 -25
- package/lib/lexers/{advRangeOp.js → advRangeOp.ts} +1 -1
- package/lib/lexers/{canEndRange.js → canEndRange.ts} +2 -2
- package/lib/lexers/{lexBoolean.js → lexBoolean.ts} +25 -6
- package/lib/lexers/{lexContext.js → lexContext.ts} +14 -6
- package/lib/lexers/{lexError.js → lexError.ts} +3 -3
- package/lib/lexers/{lexFunction.js → lexFunction.ts} +3 -2
- package/lib/lexers/lexNameFuncCntx.ts +112 -0
- package/lib/lexers/{lexNamed.js → lexNamed.ts} +4 -4
- package/lib/lexers/{lexNewLine.js → lexNewLine.ts} +3 -2
- package/lib/lexers/{lexNumber.js → lexNumber.ts} +4 -3
- package/lib/lexers/{lexOperator.js → lexOperator.ts} +5 -4
- package/lib/lexers/lexRange.ts +15 -0
- package/lib/lexers/{lexRangeA1.js → lexRangeA1.ts} +11 -7
- package/lib/lexers/{lexRangeR1C1.js → lexRangeR1C1.ts} +10 -6
- package/lib/lexers/{lexRangeTrim.js → lexRangeTrim.ts} +3 -2
- package/lib/lexers/{lexRefOp.js → lexRefOp.ts} +4 -3
- package/lib/lexers/{lexString.js → lexString.ts} +3 -3
- package/lib/lexers/{lexStructured.js → lexStructured.ts} +5 -5
- package/lib/lexers/{lexWhitespace.js → lexWhitespace.ts} +3 -2
- package/lib/lexers/sets.ts +51 -0
- package/lib/mergeRefTokens.spec.ts +141 -0
- package/lib/{mergeRefTokens.js → mergeRefTokens.ts} +14 -9
- package/lib/nodeTypes.ts +54 -0
- package/lib/parse.spec.ts +1410 -0
- package/lib/{parser.js → parse.ts} +81 -63
- package/lib/parseA1Range.spec.ts +233 -0
- package/lib/parseA1Range.ts +206 -0
- package/lib/parseA1Ref.spec.ts +337 -0
- package/lib/parseA1Ref.ts +115 -0
- package/lib/parseR1C1Range.ts +191 -0
- package/lib/parseR1C1Ref.spec.ts +323 -0
- package/lib/parseR1C1Ref.ts +127 -0
- package/lib/parseRef.spec.ts +90 -0
- package/lib/parseRef.ts +240 -0
- package/lib/{parseSRange.js → parseSRange.ts} +15 -10
- package/lib/parseStructRef.spec.ts +168 -0
- package/lib/parseStructRef.ts +76 -0
- package/lib/stringifyA1Range.spec.ts +72 -0
- package/lib/stringifyA1Range.ts +72 -0
- package/lib/stringifyA1Ref.spec.ts +64 -0
- package/lib/stringifyA1Ref.ts +59 -0
- package/lib/{stringifyPrefix.js → stringifyPrefix.ts} +17 -2
- package/lib/stringifyR1C1Range.spec.ts +92 -0
- package/lib/stringifyR1C1Range.ts +73 -0
- package/lib/stringifyR1C1Ref.spec.ts +63 -0
- package/lib/stringifyR1C1Ref.ts +67 -0
- package/lib/stringifyStructRef.spec.ts +124 -0
- package/lib/stringifyStructRef.ts +113 -0
- package/lib/stringifyTokens.ts +15 -0
- package/lib/toCol.spec.ts +11 -0
- package/lib/{toCol.js → toCol.ts} +4 -4
- package/lib/tokenTypes.ts +76 -0
- package/lib/tokenize-srefs.spec.ts +429 -0
- package/lib/tokenize.spec.ts +2103 -0
- package/lib/tokenize.ts +346 -0
- package/lib/translate.spec.ts +35 -0
- package/lib/translateToA1.spec.ts +247 -0
- package/lib/translateToA1.ts +231 -0
- package/lib/translateToR1C1.spec.ts +227 -0
- package/lib/translateToR1C1.ts +145 -0
- package/lib/types.ts +179 -0
- package/lib/xlsx/index.spec.ts +27 -0
- package/lib/xlsx/index.ts +32 -0
- package/package.json +45 -31
- package/tsconfig.json +28 -0
- package/typedoc-ignore-links.ts +17 -0
- package/typedoc.json +41 -0
- package/.eslintrc +0 -22
- package/benchmark/benchmark.js +0 -48
- package/benchmark/formulas.json +0 -15677
- package/dist/fx.d.ts +0 -823
- package/dist/fx.js +0 -2
- package/dist/package.json +0 -1
- package/lib/a1.js +0 -348
- package/lib/a1.spec.js +0 -458
- package/lib/addTokenMeta.spec.js +0 -153
- package/lib/astTypes.js +0 -96
- package/lib/extraTypes.js +0 -74
- package/lib/fixRanges.js +0 -104
- package/lib/fixRanges.spec.js +0 -171
- package/lib/fromCol.spec.js +0 -11
- package/lib/index.js +0 -134
- package/lib/index.spec.js +0 -67
- package/lib/isType.spec.js +0 -168
- package/lib/lexer-srefs.spec.js +0 -324
- package/lib/lexer.js +0 -264
- package/lib/lexer.spec.js +0 -1953
- package/lib/lexers/lexRange.js +0 -8
- package/lib/lexers/sets.js +0 -38
- package/lib/mergeRefTokens.spec.js +0 -121
- package/lib/package.json +0 -1
- package/lib/parseRef.js +0 -157
- package/lib/parseRef.spec.js +0 -71
- package/lib/parseStructRef.js +0 -48
- package/lib/parseStructRef.spec.js +0 -164
- package/lib/parser.spec.js +0 -1208
- package/lib/rc.js +0 -341
- package/lib/rc.spec.js +0 -403
- package/lib/stringifyStructRef.js +0 -80
- package/lib/stringifyStructRef.spec.js +0 -182
- package/lib/toCol.spec.js +0 -11
- package/lib/translate-toA1.spec.js +0 -214
- package/lib/translate-toRC.spec.js +0 -197
- package/lib/translate.js +0 -239
- package/lib/translate.spec.js +0 -21
- package/rollup.config.mjs +0 -22
- package/tsd.json +0 -12
package/dist/fx.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";const e="operator",t="operator-trim",n="bool",r="error",o="number",l="func",s="newline",c="whitespace",i="string",u="context_quote",a="context",f="range",h="range_beam",p="range_ternary",d="range_named",m="structured",y="fx_prefix",g="unknown",v="UnaryExpression",x="BinaryExpression",C="ReferenceIdentifier",A="Literal",$="ErrorLiteral",w="CallExpression",N="LambdaExpression",R="LetExpression",b="ArrayExpression",E="Identifier",k=16383,T=1048575,L={};function I(e,t){if(e.length){const n=e[0];t[n]=t[n]||{},I(e.slice(1),t[n])}else t.$=!0}[[f,":",f],[f,".:",f],[f,":.",f],[f,".:.",f],[f],[h],[p],[a,"!",f,":",f],[a,"!",f,".:",f],[a,"!",f,":.",f],[a,"!",f,".:.",f],[a,"!",f],[a,"!",h],[a,"!",p],[u,"!",f,":",f],[u,"!",f,".:",f],[u,"!",f,":.",f],[u,"!",f,".:.",f],[u,"!",f],[u,"!",h],[u,"!",p],[d],[a,"!",d],[u,"!",d],[m],[d,m],[a,"!",d,m],[u,"!",d,m]].forEach((e=>I(e.concat().reverse(),L)));const O=(t,n,r,o=0)=>{let l=o,s=n;const c=t.length-o;for(;l<=c;){const n=t[r-l];if(n){const t=n.type===e?n.value:n.type;if(t in s){s=s[t],l+=1;continue}}return s.$?l:0}};function U(e){const t=[];for(let n=e.length-1;n>=0;n--){let r=e[n];const o=r.type;if(o===f||o===h||o===p||o===d||o===m){const t=O(e,L,n);if(t>1){r={...r,value:""};const o=n-t+1;for(let t=o;t<=n;t++)r.value+=e[t].value;r.loc&&e[o].loc&&(r.loc[0]=e[o].loc[0]),n-=t-1}}t[t.length]=r}return t.reverse()}const F=/#(?:NAME\?|FIELD!|CALC!|VALUE!|REF!|DIV\/0!|NULL!|NUM!|N\/A|GETTING_DATA\b|SPILL!|UNKNOWN!|SYNTAX\?|ERROR!|CONNECT!|BLOCKED!|EXTERNAL!)/iy;function S(e){return 9===e||11===e||12===e||13===e||32===e||160===e||5760===e||8232===e||8233===e||8239===e||8287===e||12288===e||65279===e||e>=8192&&e<=8202}function M(e,t,n){const r=e.charCodeAt(t);let o,l;if(39===r){const r=t;for(t++;t<e.length;){const s=e.charCodeAt(t);if(91===s){if(o)return;o=t}else if(93===s){if(l)return;l=t}else if(39===s&&(t++,39!==e.charCodeAt(t))){let s=null==o&&null==l;return n.xlsx&&o===r+1&&l===t-2&&(s=!0),o>=r+1&&l<t-2&&l>o+1&&(s=!0),s&&33===e.charCodeAt(t)?{type:u,value:e.slice(r,t)}:void 0}t++}}else if(33!==r){const r=t;for(;t<e.length;){const s=e.charCodeAt(t);if(91===s){if(o)return;o=t}else if(93===s){if(l)return;l=t}else if(33===s){let s=null==o&&null==l;if(n.xlsx&&o===r&&l===t-1&&(s=!0),o>=r&&l<t-1&&l>o+1&&(s=!0),s)return{type:a,value:e.slice(r,t)}}else if((null==o||null!=l)&&!(s>=65&&s<=90||s>=97&&s<=122||s>=48&&s<=57||46===s||95===s||161===s||164===s||167===s||168===s||170===s||173===s||s>=175))return;t++}}}function D(e,t){const n=e.charCodeAt(t);if(46===n){if(58===e.charCodeAt(t+1))return 46===e.charCodeAt(t+2)?3:2}else if(58===n){return 46===e.charCodeAt(t+1)?2:1}return 0}function _(e,t){const n=e.charCodeAt(t);return!(n>=65&&n<=90||n>=97&&n<=122||n>=48&&n<=57||95===n||n>160)}function j(e,t){const n=e.charCodeAt(t);return!(n>=65&&n<=90||n>=97&&n<=122||n>=48&&n<=57||95===n||40===n||36===n||46===n)}function B(e,t){const n=t;36===e.charCodeAt(t)&&t++;const r=t+3;let o=0;do{const n=e.charCodeAt(t);if(n>=65&&n<=90)o=26*o+n-64,t++;else{if(!(n>=97&&n<=122))break;o=26*o+n-96,t++}}while(t<r&&t<e.length);return o&&o<=16384?t-n:0}function X(e,t){const n=t;36===e.charCodeAt(t)&&t++;const r=t+7;let o=0,l=e.charCodeAt(t);if(l>=49&&l<=57){o=10*o+l-48,t++;do{if(l=e.charCodeAt(t),!(l>=48&&l<=57))break;o=10*o+l-48,t++}while(t<r&&t<e.length)}return o&&o<=1048576?t-n:0}function P(e,t,n=!1){const r=t,o=e.charCodeAt(t);if(n?82===o||114===o:67===o||99===o){t++;let o=0,l=0,s=e.length;const c=e.charCodeAt(t);let i,u=1;const a=91===c;if(a)s=Math.min(s,t+(n?8:6)),t++,i=e.charCodeAt(t),43!==i&&45!==i||(t++,s++,u=45===i?-1:1);else if(c<49||c>57||isNaN(c))return 1;do{const n=e.charCodeAt(t);if(!(n>=48&&n<=57))break;l=10*l+n-48,o++,t++}while(t<s);const f=n?T:k;if(a){return 93!==e.charCodeAt(t)?0:(t++,l*=u,o&&-f<=l&&l<=f?t-r:0)}return o&&l<=f+1?t-r:0}return 0}function W(e,t,n){return n.r1c1?function(e,t,n){let r=t;const o=P(e,r,!0);r+=o;const l=P(e,r);if(r+=l,l||o){const s=D(e,r),c=r;if(s){r+=s;const c=P(e,r,!0);r+=c;const i=P(e,r);if(r+=i,o&&!l&&c&&i||!o&&l&&c&&i||o&&l&&c&&!i||o&&l&&!c&&i){if(n.allowTernary&&_(e,r))return{type:p,value:e.slice(t,r)}}else if((l&&i&&!o&&!c||!l&&!i&&o&&c)&&_(e,r))return{type:h,value:e.slice(t,r)}}if(_(e,c))return{type:o&&l?f:h,value:e.slice(t,c)}}}(e,t,n):function(e,t,n){let r=t;const o=B(e,r);let l=0,s=0;if(o){r+=o;const c=X(e,r);r+=c;const i=D(e,r),u=r;if(i)if(r+=i,l=B(e,r),r+=l,s=X(e,r),r+=s,c&&s&&l){if(_(e,r)&&n.mergeRefs)return{type:f,value:e.slice(t,r)}}else if(c||s){if(n.allowTernary&&(s||l)&&j(e,r))return{type:p,value:e.slice(t,r)}}else if(_(e,r))return{type:h,value:e.slice(t,r)};if(c&&_(e,u))return{type:f,value:e.slice(t,u)}}else{const o=X(e,r);if(o){r+=o;const c=D(e,r);if(c){if(r+=c,l=B(e,r),l&&(r+=l),s=X(e,r),r+=s,l&&s&&n.allowTernary&&j(e,r))return{type:p,value:e.slice(t,r)};if(!l&&s&&_(e,r))return{type:h,value:e.slice(t,r)}}}}}(e,t,n)}const z=93,G=91,Y={headers:1,data:2,totals:4,all:8,"this row":16,"@":16},H=(...e)=>Object.freeze(e),K={0:H(),1:H("headers"),2:H("data"),4:H("totals"),8:H("all"),16:H("this row"),3:H("headers","data"),6:H("data","totals")};function Z(e,t){let n=t;if(e.charCodeAt(n++)===G&&35===e.charCodeAt(n++)){do{const t=e.charCodeAt(n);if(!(t>=65&&t<=90||t>=97&&t<=122||32===t))break;n++}while(n<t+11);if(e.charCodeAt(n++)===z)return n-t}}function q(e,t){let n=t;for(;S(e.charCodeAt(n));)n++;return n-t}function V(e,t,n=!0){let r=t,o="";if(e.charCodeAt(r)===G){let n;r++;do{if(n=e.charCodeAt(r),39===n){if(r++,n=e.charCodeAt(r),39!==n&&35!==n&&64!==n&&n!==G&&n!==z)return;o+=String.fromCharCode(n),r++}else{if(39===n||35===n||64===n||n===G)return;if(n===z)return r++,[e.slice(t,r),o];o+=String.fromCharCode(n),r++}}while(r<e.length)}else if(n){let n;do{if(n=e.charCodeAt(r),39===n||35===n||64===n||n===G||n===z||58===n)break;o+=String.fromCharCode(n),r++}while(r<e.length);if(r!==t)return[o,o]}}function Q(e,t=0){const n=[],r=t;let o,l=0;if(e.charCodeAt(t)!==G)return;if(o=Z(e,t)){const n=e.slice(t+2,t+o-1);t+=o;const r=Y[n.toLowerCase()];if(!r)return;l|=r}else if(o=V(e,t,!1))t+=o[0].length,o[1]&&n.push(o[1]);else{let r=!0;for(t++,t+=q(e,t);r&&(o=Z(e,t));){const n=e.slice(t+2,t+o-1),s=Y[n.toLowerCase()];if(!s)return;l|=s,t+=o,t+=q(e,t),r=44===e.charCodeAt(t),r&&(t++,t+=q(e,t))}if(r&&64===e.charCodeAt(t)&&(l|=Y["@"],t+=1,r=e.charCodeAt(t)!==z),!K[l])return;const s=r&&V(e,t,!0);if(s){if(t+=s[0].length,n.push(s[1]),58===e.charCodeAt(t)){const r=V(e,++t,!0);if(!r)return;t+=r[0].length,n.push(r[1])}r=!1}if(t+=q(e,t),r||e.charCodeAt(t)!==z)return;t++}const s=K[l];return{columns:n,sections:s?s.concat():s,length:t-r,token:e.slice(r,t)}}function J(e,t){const n=Q(e,t);if(n&&n.length){let r=n.length;for(;S(e.charCodeAt(t+r));)r++;if(33!==e.charCodeAt(t+r))return{type:m,value:n.token}}}function ee(e,t){const n=t;do{const n=e.charCodeAt(t);if(n<48||n>57)break;t++}while(t<e.length);return t-n}function te(e,t){const n=t,r=e.charCodeAt(t);if(!(r>=65&&r<=90||r>=97&&r<=122||95===r||92===r||r>160))return;let o;t++;do{if(o=e.charCodeAt(t),!(o>=65&&o<=90||o>=97&&o<=122||o>=48&&o<=57||95===o||92===o||46===o||63===o||o>160))break;t++}while(isFinite(o));const l=t-n;if(l&&l<255){if(92===r&&l<3)return;if(1===l&&(114===r||82===r||99===r||67===r))return;return{type:d,value:e.slice(n,t)}}}const ne=[function(e,t){if(35===e.charCodeAt(t)){F.lastIndex=t;const n=F.exec(e);if(n)return{type:r,value:n[0]}}},function(e,n){const r=e.charCodeAt(n);if(46===r||58===r){const o=e.charCodeAt(n+1);if(r!==o){if(58===o)return{type:t,value:e.slice(n,n+(46===e.charCodeAt(n+2)?3:2))};if(46===o)return{type:t,value:e.slice(n,n+2)}}}},function(t,n){const r=t.charCodeAt(n),o=t.charCodeAt(n+1);return 60===r&&61===o||62===r&&61===o||60===r&&62===o?{type:e,value:t.slice(n,n+2)}:123===r||125===r||33===r||35===r||37===r||38===r||40===r||41===r||42===r||43===r||44===r||45===r||47===r||58===r||59===r||60===r||61===r||62===r||64===r||94===r?{type:e,value:t[n]}:void 0},function(e,t){const n=t;let r=e.charCodeAt(t);if(!(r<65||r>90)||!(r<97||r>122)||95===r){t++;do{if(r=e.charCodeAt(t),(r<65||r>90)&&(r<97||r>122)&&(r<48||r>57)&&95!==r&&46!==r)break;t++}while(t<e.length);return 40===e.charCodeAt(t)?{type:l,value:e.slice(n,t)}:void 0}},function(e,t){const r=e.charCodeAt(t);if(84===r||116===r){const r=e.charCodeAt(t+1);if(82===r||114===r){const r=e.charCodeAt(t+2);if(85===r||117===r){const r=e.charCodeAt(t+3);if(69===r||101===r)return{type:n,value:e.slice(t,t+4)}}}}if(70===r||102===r){const r=e.charCodeAt(t+1);if(65===r||97===r){const r=e.charCodeAt(t+2);if(76===r||108===r){const r=e.charCodeAt(t+3);if(83===r||115===r){const r=e.charCodeAt(t+4);if(69===r||101===r)return{type:n,value:e.slice(t,t+5)}}}}}},function(e,t){const n=t;for(;10===e.charCodeAt(t);)t++;if(t!==n)return{type:s,value:e.slice(n,t)}},function(e,t){const n=t;for(;S(e.charCodeAt(t));)t++;if(t!==n)return{type:c,value:e.slice(n,t)}},function(e,t){const n=t;if(34===e.charCodeAt(t)){for(t++;t<e.length;){if(34===e.charCodeAt(t)&&(t++,34!==e.charCodeAt(t)))return{type:i,value:e.slice(n,t)};t++}return{type:i,value:e.slice(n,t),unterminated:!0}}},M,W,J,function(e,t){const n=t,r=ee(e,t);if(!r)return;if(t+=r,46===e.charCodeAt(t)){const n=ee(e,++t);if(!n)return;t+=n}const l=e.charCodeAt(t);if(69===l||101===l){t++;const n=e.charCodeAt(t);43!==n&&45!==n||t++;const r=ee(e,t);if(!r)return;t+=r}return{type:o,value:e.slice(n,t)}},te],re=[function(t,n,r){if(33===t.charCodeAt(n))return{type:e,value:t[n]};if(!r.r1c1){const r=D(t,n);if(r)return{type:e,value:t.slice(n,n+r)}}},M,W,J,te],oe=(e,t)=>e&&e.type===t,le={withLocation:!1,mergeRefs:!0,allowTernary:!1,negativeNumbers:!0,r1c1:!1},se=e=>e.type===d||e.type===l,ce=t=>!oe(t,e)||"%"===t.value||"}"===t.value||")"===t.value||"#"===t.value;function ie(n,r,i={}){const u={...le,...i},{withLocation:a,mergeRefs:h,negativeNumbers:p}=u,m=[];let v=0,x=0,C=0;const A=[];let $=null,w=null,N=null;const R=e=>{const n=e.type===g,r=N&&N.type===g;N&&(n&&r||n&&se(N)||r&&se(e))?(N.value+=e.value,N.type=g,a&&(N.loc[1]=e.loc[1])):(e.type===t&&(A.push(m.length),e.type=g),m[m.length]=e,N=e,e.type!==c&&e.type!==s&&(w=$,$=e))};if(n.startsWith("=")){const e={type:y,value:"="};a&&(e.loc=[0,1]),v++,R(e)}const b=r.length;for(;v<n.length;){const t=v;let s;for(let e=0;e<b;e++)if(s=r[e](n,v,u),s){v+=s.value.length;break}if(s||(s={type:g,value:n[v]},v++),a&&(s.loc=[t,v]),N&&"("===s.value&&N.type===l&&/^l(?:ambda|et)$/i.test(N.value)&&x++,s.type===g&&1===s.value.length){const e=s.value.toLowerCase();C+="r"===e||"c"===e?1:0}if(p&&s.type===o){const t=N;if(t&&oe(t,e)&&"-"===t.value&&(!w||oe(w,y)||!ce(w))){const e=m.pop();s.value="-"+s.value,s.loc&&(s.loc[0]=e.loc[0]),$=w,N=m[m.length-1]}}R(s)}C&&x&&function(t){let n,r=0,o=0;for(const s of t){if(s.type===e)if("("===s.value){if(o++,n.type===l){const e=n.value.toLowerCase();"lambda"!==e&&"let"!==e||(r=o)}}else")"===s.value&&(o--,o<r&&(r=0));else r&&s.type===g&&/^[rc]$/.test(s.value)&&(s.type=d);n=s}}(m);for(const t of A){const n=m[t-1],r=m[t+1];n&&n.type===f&&r&&r.type===f?m[t].type=e:m[t].type=g}return h?U(m):m}function ue(e,t={}){return ie(e,ne,t)}function ae(e){return!!e&&(e.type===f||e.type===h||e.type===p)}function fe(e){return!!e&&(e.type===f||e.type===h||e.type===p||e.type===m||e.type===d)}function he(e){return!!e&&(e.type===n||e.type===r||e.type===o||e.type===i)}function pe(e){return!!e&&e.type===r}function de(e){return!!e&&(e.type===c||e.type===s)}function me(e){return!!e&&e.type===l}function ye(e){return!!e&&e.type===y}function ge(t){return!!t&&t.type===e}const ve="(END)",xe="(FUNCTION)",Ce="(WHITESPACE)",Ae=["ANCHORARRAY","CHOOSE","DROP","IF","IFS","INDEX","INDIRECT","LAMBDA","LET","OFFSET","REDUCE","SINGLE","SWITCH","TAKE","TRIMRANGE","XLOOKUP"],$e={};let we,Ne,Re,be=!1,Ee=!1,ke=!1;const Te=e=>ke||Ae.includes(e.toUpperCase()),Le=e=>!!e&&(e.type===C||(e.type===$||e.type===r)&&"#REF!"===e.value||e.type===x&&(":"===e.operator||" "===e.operator||","===e.operator)||fe(e)||e.type===w&&Te(e.callee.name));function Ie(e,t=null){const n=new Error(e);throw n.source=Ne.map((e=>e.value)).join(""),n.sourceOffset=Ne.slice(0,t??Re).reduce(((e,t)=>e+t.value.length),0),n}function Oe(e=!1){let t,n=Re;do{t=Ne[++n]}while(t&&(de(t)||ge(t)&&"("===t.value));return((e,t=!1)=>{const n=(e&&e.value)+"";return!(!fe(e)&&(!t||!ge(e)||":"!==n&&","!==n&&n.trim())&&(!me(e)||!Te(n))&&(!pe(e)||"#REF!"!==n))})(t,e)}function Ue(e=null,t=null){if(e&&e!==we.id&&Ie(`Expected ${e} but got ${we.id}`),de(Ne[Re])){const e=Le(t),n=e&&Oe(!1),r=e&&Ne[Re+1]&&"("===Ne[Re+1].value;if(!n&&!r)for(;de(Ne[Re]);)Re++}if(Re>=Ne.length)return void(we=$e[ve]);const n=Ne[Re];let r;return Re+=1,n.unterminated&&Ie("Encountered an unterminated token"),ge(n)?(r=$e[n.value],r||Ie(`Unknown operator ${n.value}`)):de(n)?r=$e[Ce]:he(n)?r=$e[A]:fe(n)?r=$e[C]:me(n)?r=$e[xe]:Ie(`Unexpected ${n.type} token: ${n.value}`),we=Object.create(r),we.type=n.type,we.value=n.value,n.loc&&(we.loc=[...n.loc]),we}function Fe(e){let t=we;Ue(null,t);let n=t.nud();for(;e<we.lbp;)t=we,Ue(null,t),n=t.led(n);return n}const Se={nud:()=>Ie("Invalid syntax"),led:()=>Ie("Missing operator")};function Me(e,t=0){let n=$e[e];return n?t>=n.lbp&&(n.lbp=t):(n={...Se},n.id=e,n.value=e,n.lbp=t,$e[e]=n),n}function De(e,t,n){const r=Me(e,t);return r.led=n||function(e){this.type=x,this.operator=this.value,delete this.value;const n=Fe(t);return this.arguments=[e,n],this.loc&&(this.loc=[e.loc[0],n.loc[1]]),this},r}function _e(e,t){const n=Me(e,0);return n.lbp=70,n.led=t||function(e){return this.type=v,this.operator=this.value,delete this.value,this.arguments=[e],this.loc&&(this.loc[0]=e.loc[0]),this},n}function je(e,t){const n=Me(e);return n.nud=t||function(){this.type=v,this.operator=this.value,delete this.value;const e=Fe(70);return this.arguments=[e],this.loc&&(this.loc[1]=e.loc[1]),this},n}function Be(e,t){return De(e,t,(function(n){Le(n)||Ie(`Unexpected ${e} operator`);const r=Fe(t);return Le(r)||Ie(`Unexpected ${we.type} following ${this.id}`),this.type=x,this.operator=this.value.trim()?this.value:" ",delete this.value,this.arguments=[n,r],this.loc&&(this.loc=[n.loc[0],r.loc[1]]),this}))}Me(ve),Be(":",80);const Xe=Be(",",80);Be(Ce,80);const Pe=e=>{const t=Xe.lbp>0;return null!=e&&(Xe.lbp=e?80:0),t};function We(e){const t=[],n={};let r,o=!1;const l=Pe(!1);if(")"!==we.id)for(;!o;){de(we)&&Ue();const e=Re,l=Fe(0);if(","===we.id){if(l.type===C&&"name"===l.kind){const e=l.value.toLowerCase();e in n&&Ie("Duplicate name: "+l.value),n[e]=1;const r={type:E,name:l.value};l.loc&&(r.loc=l.loc),t.push(r)}else Re=e,Ie("LAMBDA argument is not a name");Ue(",")}else r=l,o=!0}return Pe(l),delete this.value,this.type=N,this.params=t,this.body=r||null,e.loc&&(this.loc=[e.loc[0],we.loc[1]]),Ue(")",this),this}function ze(e){const t=[],n=[],r={};let o,l=0;const s=(e,s)=>{if(o&&Ie("Unexpected argument following calculation"),s&&l>=2)o=e;else{if(!(l%2))if(e&&e.type===C&&"name"===e.kind){const n=e.value.toLowerCase();n in r&&Ie("Duplicate name: "+e.value),r[n]=1,t.push({type:E,name:e.value,loc:e.loc})}else l>=2?o=e:Ie("Argument is not a name");else n.push(e)}l++},c=Pe(!1);let i=!1;if(")"!==we.id){for(;")"!==we.id;)if(de(we)&&Ue(),","===we.id)s(null),i=!0,Ue();else{s(Fe(0),","!==we.id),i=!1,","===we.id&&(Ue(","),i=!0)}Pe(c)}i&&s(null,!0),void 0===o&&Ie("Unexpected end of arguments"),Pe(c),delete this.value,this.type=R,this.declarations=[],t.length||Ie("Unexpected end of arguments");for(let e=0;e<t.length;e++){const r={type:"LetDeclarator",id:t[e],init:n[e],loc:t[e].loc&&[t[e].loc[0],n[e].loc[1]]};this.declarations.push(r)}return this.body=o,e.loc&&(this.loc=[e.loc[0],we.loc[1]]),Ue(")",this),this}function Ge(e,t=!1){let n=!1,r="";const o=[],l=()=>{r&&o.push(t?r:{value:r,braced:n}),r=""};for(let t=0;t<e.length;t++){const o=e[t];"["===o?(l(),n=!0):"]"===o?(l(),n=!1):r+=o}return l(),o}function Ye(e){return{context:Ge(e,!0)}}function He(e){const t={},n=Ge(e);if(n.length>1)t.workbookName=n[n.length-2].value,t.sheetName=n[n.length-1].value;else if(1===n.length){const e=n[0];e.braced?t.workbookName=e.value:t.sheetName=e.value}return t}_e("%"),_e("#",(function(e){return Le(e)||Ie("# expects a reference"),this.type=v,this.operator=this.value,delete this.value,this.arguments=[e],this})),je("+"),je("-"),je("@"),De("^",50),De("*",40),De("/",40),De("+",30),De("-",30),De("&",20),De("=",10),De("<",10),De(">",10),De("<=",10),De(">=",10),De("<>",10),Me(A).nud=function(){const{type:e,value:t}=this;if(this.type=A,this.raw=t,e===o)this.value=+t;else if(e===n)this.value="TRUE"===t.toUpperCase();else if(e===r)this.type=$,this.value=t.toUpperCase();else{if(e!==i)throw new Error("Unsupported literal type: "+e);this.value=t.slice(1,-1).replace(/""/g,'"')}return this},Me(C).nud=function(){return this.type===d?this.kind="name":this.type===m?this.kind="table":this.type===h?this.kind="beam":this.kind="range",this.type=C,this},Me(")"),je("(",(function(){const e=Pe(!0),t=Fe(0);return Ue(")",t),Pe(e),t})),Me(xe).nud=function(){return this},De("(",90,(function(e){let t={type:E,name:e.value};e.id!==xe&&(e.type===N||e.type===w||e.type===R||e.type===C||e.type===v&&"#"===e.value||e.type===$&&"#REF!"===e.value?t=e:Ie("Unexpected call",Re-1));const n=e.value.toLowerCase();if("lambda"===n)return We.call(this,e);if("let"===n)return ze.call(this,e);const r=[];let o=!1;if(")"!==we.id){const e=Pe(!1);for(;")"!==we.id;)if(de(we)&&Ue(),","===we.id)r.push(null),o=!0,Ue();else{const e=Fe(0);r.push(e),o=!1,","===we.id&&(Ue(","),o=!0)}Pe(e)}o&&r.push(null);const l=we;return delete this.value,this.type=w,this.callee=t,e.loc&&(this.callee.loc=[...e.loc]),this.arguments=r,e.loc&&(this.loc=[e.loc[0],l.loc[1]]),Ue(")",this),this})),Me("}"),Me(";"),je("{",(function(){"}"===we.id&&Ie("Unexpected empty array");let e=[],t=!1;const n=[e],r=Pe(!1);for(;!t;){if(de(we)&&Ue(),he(we))e.push($e[A].nud.call(we)),Ue();else if(be&&Le(we))e.push($e[C].nud.call(we)),Ue();else if(Ee&&me(we)){const t=Fe(0);e.push(t)}else Ie(`Unexpected ${we.type} in array: ${we.value}`);","===we.id?Ue(","):";"===we.id?(Ue(";"),e=[],n.push(e)):t=!0}const o=we;return Ue("}"),Pe(r),this.type=b,this.elements=n,this.loc&&(this.loc[1]=o.loc[1]),delete this.value,this}));const Ke=e=>e&&(":"===e.value||".:"===e.value||":."===e.value||".:."===e.value)&&{operator:e.value},Ze=e=>e&&e.type===f&&{r0:e.value},qe=e=>e&&e.type===p&&{r0:e.value},Ve=e=>e&&e.type===f&&{r1:e.value},Qe=t=>t&&t.type===e&&"!"===t.value&&{},Je=e=>e&&e.type===h&&{r0:e.value},et=e=>e&&e.type===m&&{struct:e.value},tt=(e,t)=>{const n=t.xlsx?He:Ye;return e&&e.type===a?n(e.value):e&&e.type===u?n(e.value.slice(1,-1).replace(/''/g,"'")):void 0},nt=e=>e&&e.type===d&&{name:e.value},rt=[[qe],[Ze,Ke,Ve],[Ze],[Je],[tt,Qe,qe],[tt,Qe,Ze,Ke,Ve],[tt,Qe,Ze],[tt,Qe,Je]],ot=rt.concat([[nt],[tt,Qe,nt],[et],[nt,et],[tt,Qe,nt,et]]);function lt(e,t){const n={withLocation:!1,mergeRefs:!1,allowTernary:!1,allowNamed:!0,r1c1:!1,xlsx:!1,...t},r=ie(e,re,n),o=n.xlsx?{workbookName:"",sheetName:"",r0:"",r1:"",name:"",operator:""}:{context:[],r0:"",r1:"",name:"",operator:""};r.length&&r[0].type===y&&r.shift();const l=n.allowNamed?ot:rt;for(let e=0;e<l.length;e++){const t={...o};if(l[e].length===r.length){const o=l[e].every(((e,o)=>{const l=e(r[o],n);return Object.assign(t,l),l}));if(o)return t}}return null}const st=String.fromCharCode;function ct(e){return(e>=702?st(((e-702)/676-0)%26+65):"")+(e>=26?st((e/26-1)%26+65):"")+st(e%26+65)}function it(e){const t=e||"",n=t.length;let r=0;if(n>2){const e=t.charCodeAt(n-3);r+=676*(1+e-(e>95?32:0)-65)}if(n>1){const e=t.charCodeAt(n-2);r+=26*(1+e-(e>95?32:0)-65)}if(n){const e=t.charCodeAt(n-1);r+=e-(e>95?32:0)-65}return r}const ut=/[^0-9A-Za-z._¡¤§¨ª\u00ad¯-\uffff]/;function at(e){let t="",n=0,r=0;const o=e.context||[];for(let e=o.length;e>-1;e--){const l=o[e];if(l){t=(r%2?"["+l+"]":l)+t,n+=+ut.test(l),r++}}return n&&(t="'"+t.replace(/'/g,"''")+"'"),t?t+"!":t}function ft(e){let t="",n=0;const{workbookName:r,sheetName:o}=e;return r&&(t+="["+r+"]",n+=+ut.test(r)),o&&(t+=o,n+=+ut.test(o)),n&&(t="'"+t.replace(/'/g,"''")+"'"),t?t+"!":t}const ht=(e,t,n)=>Math.min(Math.max(t,e),n),pt=(e,t)=>(t?"$":"")+ct(e),dt=(e,t)=>(t?"$":"")+String(e+1);function mt(e){return"both"===e?".:.":"head"===e?".:":"tail"===e?":.":":"}function yt(e,t){return e&&t?"both":e?"head":t?"tail":void 0}function gt(e){const t=/^(?=.)(\$(?=\D))?([A-Za-z]{0,3})?(\$)?([1-9][0-9]{0,6})?$/.exec(e);return t&&(t[2]||t[4])?[t[4]?(n=t[4],+n-1):null,t[2]?it(t[2]):null,!!t[3],!!t[1]]:null;var n}function vt(e){let t=null,n=null,r=null,o=null,l=!1,s=!1,c=!1,i=!1;const[u,a,f,h,p]=e.split(/(\.?:\.?)/);if(h||p)return null;const d=yt(!!a&&"."===a[0],!!a&&"."===a[a.length-1]),m=gt(u),y=f?gt(f):null;if(!m||f&&!y)return null;if(null!=m[0]&&null!=m[1]?[t,n,l,s]=m:null==m[0]&&null!=m[1]?[,n,,s]=m:null!=m[0]&&null==m[1]&&([t,,l]=m),f)null!=y[0]&&null!=y[1]?[r,o,c,i]=y:null==y[0]&&null!=y[1]?[,o,,i]=y:null!=y[0]&&null==y[1]&&([r,,c]=y);else{if(null==t||null==n)return null;r=t,o=n,c=l,i=s}null!=o&&(null==n||null!=n&&o<n)&&([n,o,s,i]=[o,n,i,s]),null!=r&&(null==t||null!=t&&r<t)&&([t,r,l,c]=[r,t,c,l]);const g={top:t,left:n,bottom:r,right:o,$top:l,$left:s,$bottom:c,$right:i};return d&&(g.trim=d),g}function xt(e,{allowNamed:t=!0,allowTernary:n=!1,xlsx:r=!1}={}){const o=lt(e,{allowNamed:t,allowTernary:n,xlsx:r,r1c1:!1});if(o&&(o.r0||o.name)){let e=null;return o.r0&&(e=vt(o.r1?o.r0+o.operator+o.r1:o.r0)),e?r?{workbookName:o.workbookName,sheetName:o.sheetName,range:e}:{context:o.context,range:e}:o.name?r?{workbookName:o.workbookName,sheetName:o.sheetName,name:o.name}:{context:o.context,name:o.name}:null}return null}function Ct(e,{xlsx:t=!1}={}){return(t?ft(e):at(e))+(e.name?e.name:function(e){let{top:t,left:n,bottom:r,right:o,trim:l}=e;const{$left:s,$right:c,$top:i,$bottom:u}=e,a=null==n,f=null==o,h=null==t,p=null==r;t=ht(0,0|t,T),n=ht(0,0|n,k),!a&&!h&&f&&p?(r=t,o=n):(r=ht(0,0|r,T),o=ht(0,0|o,k));const d=mt(l);return 0===t&&r>=T&&!a&&!f&&(!(s&&!a||c&&!f)||n===o)||h&&p?pt(n,s)+d+pt(o,c):0===n&&o>=k&&!h&&!p&&(!(i&&!h||u&&!p)||t===r)||a&&f?dt(t,i)+d+dt(r,u):a||h||f||!p?a||!h||f||p?a||h||!f||p?!a||h||f||p?o!==n||r!==t||c!==s||u!==i?pt(n,s)+dt(t,i)+d+pt(o,c)+dt(r,u):pt(n,s)+dt(t,i):pt(o,c)+dt(t,i)+d+dt(r,u):pt(n,s)+dt(t,i)+d+dt(r,u):pt(n,s)+dt(r,u)+d+pt(o,c):pt(n,s)+dt(t,i)+d+pt(o,c)}(e.range))}function At(e){return null==e.top&&(e.top=0,e.$top=!1),null==e.bottom&&(e.bottom=T,e.$bottom=!1),null==e.left&&(e.left=0,e.$left=!1),null==e.right&&(e.right=k,e.$right=!1),e}function $t(e,t={xlsx:!1}){const n=lt(e,t);if(n&&n.struct){const e=Q(n.struct);if(e&&e.length===n.struct.length)return t.xlsx?{workbookName:n.workbookName,sheetName:n.sheetName,table:n.name,columns:e.columns,sections:e.sections}:{context:n.context,table:n.name,columns:e.columns,sections:e.sections}}return null}function wt(e,t){return null==e&&null==t||e===t}function Nt(e,t){if(Array.isArray(e)!==Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!wt(e[n],t[n]))return!1;return!0}function Rt(e,t){return!e&&!t||String(e).toLowerCase()===String(t).toLowerCase()}const bt=(e,t,n)=>Math.min(Math.max(t,e),n);function Et(e,t){return t?String(e+1):e?"["+e+"]":""}function kt(e){let t=null,n=null,r=null,o=null;const l=/^R(?:\[([+-]?\d+)\]|(\d+))?/.exec(e);l&&(l[1]?(t=parseInt(l[1],10),r=!1):l[2]?(t=parseInt(l[2],10)-1,r=!0):(t=0,r=!1),e=e.slice(l[0].length));const s=/^C(?:\[([+-]?\d+)\]|(\d+))?/.exec(e);return s&&(s[1]?(n=parseInt(s[1],10),o=!1):s[2]?(n=parseInt(s[2],10)-1,o=!0):(n=0,o=!1),e=e.slice(s[0].length)),!l&&!s||e.length?null:[t,n,r,o]}function Tt(e){let t=null;const[n,r,o,l]=e.split(/(\.?:\.?)/);if(l)return null;const s=kt(n),c=yt(!!r&&"."===r[0],!!r&&"."===r[r.length-1]);if(s){const[e,n,r,l]=s;if(o){const s=kt(o);if(!s)return null;{t={};const[o,c,i,u]=s;null!=e&&null!=o?(t.r0=r===i?Math.min(e,o):e,t.$r0=r,t.r1=r===i?Math.max(e,o):o,t.$r1=i):null!=e&&null==o?(t.r0=e,t.$r0=r,t.r1=null,t.$r1=r):null==e&&null!=o?(t.r0=o,t.$r0=i,t.r1=null,t.$r1=i):null==e&&null==o&&(t.r0=null,t.$r0=!1,t.r1=null,t.$r1=!1),null!=n&&null!=c?(t.c0=l===u?Math.min(n,c):n,t.$c0=l,t.c1=l===u?Math.max(n,c):c,t.$c1=u):null!=n&&null==c?(t.c0=n,t.$c0=l,t.c1=null,t.$c1=l):null==n&&null!=c?(t.c0=c,t.$c0=u,t.c1=null,t.$c1=u):null==n&&null==c&&(t.c0=null,t.$c0=!1,t.c1=null,t.$c1=!1)}}else t=null!=e&&null==n?{r0:e,c0:null,r1:e,c1:null,$r0:r,$c0:!1,$r1:r,$c1:!1}:null==e&&null!=n?{r0:null,c0:n,r1:null,c1:n,$r0:!1,$c0:l,$r1:!1,$c1:l}:{r0:e||0,c0:n||0,r1:e||0,c1:n||0,$r0:r||!1,$c0:l||!1,$r1:r||!1,$c1:l||!1}}return t&&c&&(t.trim=c),t}function Lt(e,{allowNamed:t=!0,allowTernary:n=!1,xlsx:r=!1}={}){const o=lt(e,{allowNamed:t,allowTernary:n,xlsx:r,r1c1:!0});if(o&&(o.r0||o.name)){const e=o.r1?Tt(o.r0+o.operator+o.r1):Tt(o.r0);return e?r?{workbookName:o.workbookName,sheetName:o.sheetName,range:e}:{context:o.context,range:e}:o.name?r?{workbookName:o.workbookName,sheetName:o.sheetName,name:o.name}:{context:o.context,name:o.name}:null}return null}function It(e,{xlsx:t=!1}={}){return(t?ft(e):at(e))+(e.name?e.name:function(e){let{r0:t,c0:n,r1:r,c1:o}=e;const{$c0:l,$c1:s,$r0:c,$r1:i}=e,u=null==t,a=null==n;let f=null==r,h=null==o;const p=mt(e.trim),d=!!e.trim;if(t=bt(c?0:-1048575,0|t,T),n=bt(l?0:-16383,0|n,k),!u&&f&&!a&&h?(r=t,f=!1,o=n,h=!1):(r=bt(i?0:-1048575,0|r,T),o=bt(s?0:-16383,0|o,k)),0===t&&r>=T&&!a&&!h||u&&f){const e=Et(n,l),t=Et(o,s);return"C"+(e!==t||d?e+p+"C"+t:e)}if(0===n&&o>=k&&!u&&!f||a&&h){const e=Et(t,c),n=Et(r,i);return"R"+(e!==n||d?e+p+"R"+n:e)}const m=Et(t,c),y=Et(r,i),g=Et(n,l),v=Et(o,s);return u||f||a||h?(u?"":"R"+m)+(a?"":"C"+g)+p+(f?"":"R"+y)+(h?"":"C"+v):m!==y||g!==v?"R"+m+"C"+g+p+"R"+y+"C"+v:"R"+m+"C"+g}(e.range))}const Ot=(e,t,n)=>null==t?null:e?t:t-n,Ut={withLocation:!1,mergeRefs:!1,allowTernary:!0,r1c1:!1};function Ft(e,t,n,r,o=!0){let l=e;if(null!=l&&!t){if(l=n+e,l<0){if(!o)return NaN;l=r+l+1}if(l>r){if(!o)return NaN;l-=r+1}}return l}const St={wrapEdges:!0,mergeRefs:!0,allowTernary:!0,xlsx:!1};function Mt(e){return e.replace(/([[\]#'@])/g,"'$1")}function Dt(e){return e[0].toUpperCase()+e.slice(1).toLowerCase()}function _t(e,t={}){const{xlsx:n,thisRow:r}=t;let o=n?ft(e):at(e);e.table&&(o+=e.table);const l=e.columns?.length??0,s=e.sections?.length??0;if(1!==s||l)if(s||1!==l){o+="[";const t=!r&&1===s&&"this row"===e.sections[0].toLowerCase();t?o+="@":s&&(o+=e.sections.map((e=>`[#${Dt(e)}]`)).join(","),l&&(o+=",")),t&&1===e.columns.length&&(c=e.columns[0],/^[a-zA-Z0-9\u00a1-\uffff]+$/.test(c))?o+=Mt(e.columns[0]):l&&(o+=e.columns.slice(0,2).map((e=>`[${Mt(e)}]`)).join(":")),o+="]"}else o+=`[${Mt(e.columns[0])}]`;else o+=`[#${Dt(e.sections[0])}]`;var c;return o}const jt=Object.freeze({OPERATOR:e,BOOLEAN:n,ERROR:r,NUMBER:o,FUNCTION:l,NEWLINE:s,WHITESPACE:c,STRING:i,CONTEXT:a,CONTEXT_QUOTE:u,REF_RANGE:f,REF_BEAM:h,REF_TERNARY:p,REF_NAMED:d,REF_STRUCT:m,FX_PREFIX:y,UNKNOWN:g}),Bt=Object.freeze({UNARY:v,BINARY:x,REFERENCE:C,LITERAL:A,ERROR:$,CALL:w,ARRAY:b,IDENTIFIER:E});exports.MAX_COLS=k,exports.MAX_ROWS=T,exports.addA1RangeBounds=At,exports.addTokenMeta=function(e,{sheetName:t="",workbookName:n=""}={}){const r=[];let o=null;const l=function(){let e=1;return()=>"fxg"+e++}(),s=[],c=()=>r.length+(o?1:0);return e.forEach(((e,i)=>{if(e.index=i,e.depth=c(),"("===e.value)r.push(e),e.depth=c();else if(")"===e.value){const t=r.pop();if(t){const n=l();e.groupId=n,e.depth=t.depth,t.groupId=n}else e.error=!0}else if("{"===e.value)o?e.error=!0:(o=e,e.depth=c());else if("}"===e.value){if(o){const t=l();e.groupId=t,e.depth=o.depth,o.groupId=t}else e.error=!0;o=null}else if(e.type===f||e.type===h||e.type===p||e.type===m){const r=e.type===m?$t(e.value,{xlsx:!0}):xt(e.value,{allowTernary:!0,xlsx:!0});if(r&&(r.range||r.columns)){r.source=e.value,function(e,t,n){e.sheetName||(e.sheetName=t),e.workbookName||(e.workbookName=n)}(r,t,n);const o=s.find((e=>function(e,t){if((e.name||t.name)&&e.name!==t.name)return!1;if(e.columns||t.columns){if(e.table!==t.table)return!1;if(!Nt(e.columns,t.columns))return!1;if(!Nt(e.sections,t.sections))return!1}return!!(!e.range&&!t.range||wt(e.range.top,t.range.top)&&wt(e.range.bottom,t.range.bottom)&&wt(e.range.left,t.range.left)&&wt(e.range.right,t.range.right))&&!(!Rt(e.workbookName,t.workbookName)||!Rt(e.sheetName,t.sheetName))}(e,r)));o?e.groupId=o.groupId:(r.groupId=l(),e.groupId=r.groupId,s.push(r))}}else e.type===g&&(e.error=!0)})),e},exports.fixRanges=function e(t,n={addBounds:!1}){if("string"==typeof t)return e(ue(t,n),n).map((e=>e.value)).join("");if(!Array.isArray(t))throw new Error("fixRanges expects an array of tokens");const{addBounds:r,r1c1:o,xlsx:l,thisRow:s}=n;if(o)throw new Error("fixRanges does not have an R1C1 mode");let c=0;return t.map((e=>{const t={...e};e.loc&&(t.loc=[...e.loc]);let n=0;if(t.type===m){const e=_t($t(t.value,{xlsx:l}),{xlsx:l,thisRow:s});n=e.length-t.value.length,t.value=e}else if(ae(t)){const e=xt(t.value,{xlsx:l,allowTernary:!0}),o=e.range;r&&At(o);const s=Ct(e,{xlsx:l});n=s.length-t.value.length,t.value=s}return c||n?(t.loc&&(t.loc[0]+=c),c+=n,t.loc&&(t.loc[1]+=c)):c+=n,t}))},exports.fromCol=it,exports.isError=pe,exports.isFunction=me,exports.isFxPrefix=ye,exports.isLiteral=he,exports.isOperator=ge,exports.isRange=ae,exports.isReference=fe,exports.isWhitespace=de,exports.mergeRefTokens=U,exports.nodeTypes=Bt,exports.parse=function(e,t){if("string"==typeof e)Ne=ue(e,{withLocation:!1,...t,mergeRefs:!0});else{if(!Array.isArray(e))throw new Error("Parse requires a string or array of tokens.");Ne=e}for(be=t?.permitArrayRanges,Ee=t?.permitArrayCalls,ke=t?.looseRefCalls,Re=0;de(Ne[Re])||ye(Ne[Re]);)Re++;Ue(),Pe(!0);const n=Fe(0);return Ue(ve),n},exports.parseA1Ref=xt,exports.parseR1C1Ref=Lt,exports.parseStructRef=$t,exports.stringifyA1Ref=Ct,exports.stringifyR1C1Ref=It,exports.stringifyStructRef=_t,exports.toCol=ct,exports.tokenTypes=jt,exports.tokenize=ue,exports.translateToA1=function(e,t,n=St){const o=vt(t),l="string"==typeof e,s={...St,...n},c=l?ue(e,{withLocation:!1,mergeRefs:s.mergeRefs,xlsx:s.xlsx,allowTernary:s.allowTernary,r1c1:!0}):e;let i=0;const u={xlsx:s.xlsx,allowTernary:s.allowTernary};return c.forEach((e=>{if(ae(e)){const t=e.value,n=Lt(t,u),l=n.range,c={},a=Ft(l.r0,l.$r0,o.top,T,s.wrapEdges),f=Ft(l.r1,l.$r1,o.top,T,s.wrapEdges);a>f?(c.top=f,c.$top=l.$r1,c.bottom=a,c.$bottom=l.$r0):(c.top=a,c.$top=l.$r0,c.bottom=f,c.$bottom=l.$r1);const h=Ft(l.c0,l.$c0,o.left,k,s.wrapEdges),p=Ft(l.c1,l.$c1,o.left,k,s.wrapEdges);h>p?(c.left=p,c.$left=l.$c1,c.right=h,c.$right=l.$c0):(c.left=h,c.$left=l.$c0,c.right=p,c.$right=l.$c1),l.trim&&(c.trim=l.trim),isNaN(a)||isNaN(f)||isNaN(h)||isNaN(p)?(e.type=r,e.value="#REF!",delete e.groupId):(n.range=c,e.value=Ct(n,u)),e.loc&&(e.loc[0]+=i,i+=e.value.length-t.length,e.loc[1]+=i)}else i&&e.loc&&(e.loc[0]+=i,e.loc[1]+=i)})),l?c.map((e=>e.value)).join(""):c},exports.translateToR1C1=function(e,t,{xlsx:n=!1,allowTernary:r=!0}={}){const{top:o,left:l}=vt(t),s="string"==typeof e,c=s?ue(e,{...Ut,xlsx:n,allowTernary:r}):e;let i=0;const u={xlsx:n,allowTernary:r};return c.forEach((e=>{if(ae(e)){const t=e.value,n=xt(t,u),r=n.range,s={};s.r0=Ot(r.$top,r.top,o),s.r1=Ot(r.$bottom,r.bottom,o),s.c0=Ot(r.$left,r.left,l),s.c1=Ot(r.$right,r.right,l),s.$r0=r.$top,s.$r1=r.$bottom,s.$c0=r.$left,s.$c1=r.$right,r.trim&&(s.trim=r.trim),n.range=s,e.value=It(n,u),e.loc&&(e.loc[0]+=i,i+=e.value.length-t.length,e.loc[1]+=i)}else i&&e.loc&&(e.loc[0]+=i,e.loc[1]+=i)})),s?c.map((e=>e.value)).join(""):c};
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnguanMiLCJzb3VyY2VzIjpbIi4uL2xpYi9jb25zdGFudHMuanMiLCIuLi9saWIvbWVyZ2VSZWZUb2tlbnMuanMiLCIuLi9saWIvbGV4ZXJzL2xleEVycm9yLmpzIiwiLi4vbGliL2xleGVycy9sZXhXaGl0ZXNwYWNlLmpzIiwiLi4vbGliL2xleGVycy9sZXhDb250ZXh0LmpzIiwiLi4vbGliL2xleGVycy9hZHZSYW5nZU9wLmpzIiwiLi4vbGliL2xleGVycy9jYW5FbmRSYW5nZS5qcyIsIi4uL2xpYi9sZXhlcnMvbGV4UmFuZ2VBMS5qcyIsIi4uL2xpYi9sZXhlcnMvbGV4UmFuZ2VSMUMxLmpzIiwiLi4vbGliL2xleGVycy9sZXhSYW5nZS5qcyIsIi4uL2xpYi9wYXJzZVNSYW5nZS5qcyIsIi4uL2xpYi9sZXhlcnMvbGV4U3RydWN0dXJlZC5qcyIsIi4uL2xpYi9sZXhlcnMvbGV4TnVtYmVyLmpzIiwiLi4vbGliL2xleGVycy9sZXhOYW1lZC5qcyIsIi4uL2xpYi9sZXhlcnMvc2V0cy5qcyIsIi4uL2xpYi9sZXhlcnMvbGV4UmFuZ2VUcmltLmpzIiwiLi4vbGliL2xleGVycy9sZXhPcGVyYXRvci5qcyIsIi4uL2xpYi9sZXhlcnMvbGV4RnVuY3Rpb24uanMiLCIuLi9saWIvbGV4ZXJzL2xleEJvb2xlYW4uanMiLCIuLi9saWIvbGV4ZXJzL2xleE5ld0xpbmUuanMiLCIuLi9saWIvbGV4ZXJzL2xleFN0cmluZy5qcyIsIi4uL2xpYi9sZXhlcnMvbGV4UmVmT3AuanMiLCIuLi9saWIvbGV4ZXIuanMiLCIuLi9saWIvaXNUeXBlLmpzIiwiLi4vbGliL3BhcnNlci5qcyIsIi4uL2xpYi9wYXJzZVJlZi5qcyIsIi4uL2xpYi90b0NvbC5qcyIsIi4uL2xpYi9mcm9tQ29sLmpzIiwiLi4vbGliL3N0cmluZ2lmeVByZWZpeC5qcyIsIi4uL2xpYi9hMS5qcyIsIi4uL2xpYi9wYXJzZVN0cnVjdFJlZi5qcyIsIi4uL2xpYi9hZGRUb2tlbk1ldGEuanMiLCIuLi9saWIvcmMuanMiLCIuLi9saWIvdHJhbnNsYXRlLmpzIiwiLi4vbGliL3N0cmluZ2lmeVN0cnVjdFJlZi5qcyIsIi4uL2xpYi9pbmRleC5qcyIsIi4uL2xpYi9maXhSYW5nZXMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IE9QRVJBVE9SID0gJ29wZXJhdG9yJztcbmV4cG9ydCBjb25zdCBPUEVSQVRPUl9UUklNID0gJ29wZXJhdG9yLXRyaW0nO1xuZXhwb3J0IGNvbnN0IEJPT0xFQU4gPSAnYm9vbCc7XG5leHBvcnQgY29uc3QgRVJST1IgPSAnZXJyb3InO1xuZXhwb3J0IGNvbnN0IE5VTUJFUiA9ICdudW1iZXInO1xuZXhwb3J0IGNvbnN0IEZVTkNUSU9OID0gJ2Z1bmMnO1xuZXhwb3J0IGNvbnN0IE5FV0xJTkUgPSAnbmV3bGluZSc7XG5leHBvcnQgY29uc3QgV0hJVEVTUEFDRSA9ICd3aGl0ZXNwYWNlJztcbmV4cG9ydCBjb25zdCBTVFJJTkcgPSAnc3RyaW5nJztcbmV4cG9ydCBjb25zdCBDT05URVhUX1FVT1RFID0gJ2NvbnRleHRfcXVvdGUnO1xuZXhwb3J0IGNvbnN0IENPTlRFWFQgPSAnY29udGV4dCc7XG5leHBvcnQgY29uc3QgUkVGX1JBTkdFID0gJ3JhbmdlJztcbmV4cG9ydCBjb25zdCBSRUZfQkVBTSA9ICdyYW5nZV9iZWFtJztcbmV4cG9ydCBjb25zdCBSRUZfVEVSTkFSWSA9ICdyYW5nZV90ZXJuYXJ5JztcbmV4cG9ydCBjb25zdCBSRUZfTkFNRUQgPSAncmFuZ2VfbmFtZWQnO1xuZXhwb3J0IGNvbnN0IFJFRl9TVFJVQ1QgPSAnc3RydWN0dXJlZCc7XG5leHBvcnQgY29uc3QgRlhfUFJFRklYID0gJ2Z4X3ByZWZpeCc7XG5leHBvcnQgY29uc3QgVU5LTk9XTiA9ICd1bmtub3duJztcblxuZXhwb3J0IGNvbnN0IFVOQVJZID0gJ1VuYXJ5RXhwcmVzc2lvbic7XG5leHBvcnQgY29uc3QgQklOQVJZID0gJ0JpbmFyeUV4cHJlc3Npb24nO1xuZXhwb3J0IGNvbnN0IFJFRkVSRU5DRSA9ICdSZWZlcmVuY2VJZGVudGlmaWVyJztcbmV4cG9ydCBjb25zdCBMSVRFUkFMID0gJ0xpdGVyYWwnO1xuZXhwb3J0IGNvbnN0IEVSUk9SX0xJVEVSQUwgPSAnRXJyb3JMaXRlcmFsJztcbmV4cG9ydCBjb25zdCBDQUxMID0gJ0NhbGxFeHByZXNzaW9uJztcbmV4cG9ydCBjb25zdCBMQU1CREEgPSAnTGFtYmRhRXhwcmVzc2lvbic7XG5leHBvcnQgY29uc3QgTEVUID0gJ0xldEV4cHJlc3Npb24nO1xuZXhwb3J0IGNvbnN0IEFSUkFZID0gJ0FycmF5RXhwcmVzc2lvbic7XG5leHBvcnQgY29uc3QgSURFTlRJRklFUiA9ICdJZGVudGlmaWVyJztcbmV4cG9ydCBjb25zdCBMRVRfREVDTCA9ICdMZXREZWNsYXJhdG9yJztcblxuZXhwb3J0IGNvbnN0IE1BWF9DT0xTID0gKDIgKiogMTQpIC0gMTsgLy8gMTYzODNcbmV4cG9ydCBjb25zdCBNQVhfUk9XUyA9ICgyICoqIDIwKSAtIDE7IC8vIDEwNDg1NzVcbiIsImltcG9ydCB7IENPTlRFWFQsIENPTlRFWFRfUVVPVEUsIFJFRl9SQU5HRSwgUkVGX05BTUVELCBSRUZfQkVBTSwgUkVGX1RFUk5BUlksIE9QRVJBVE9SLCBSRUZfU1RSVUNUIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuXG5jb25zdCBFTkQgPSAnJCc7XG5cbmNvbnN0IHZhbGlkUnVuc01lcmdlID0gW1xuICBbIFJFRl9SQU5HRSwgJzonLCBSRUZfUkFOR0UgXSxcbiAgWyBSRUZfUkFOR0UsICcuOicsIFJFRl9SQU5HRSBdLFxuICBbIFJFRl9SQU5HRSwgJzouJywgUkVGX1JBTkdFIF0sXG4gIFsgUkVGX1JBTkdFLCAnLjouJywgUkVGX1JBTkdFIF0sXG4gIFsgUkVGX1JBTkdFIF0sXG4gIFsgUkVGX0JFQU0gXSxcbiAgWyBSRUZfVEVSTkFSWSBdLFxuICBbIENPTlRFWFQsICchJywgUkVGX1JBTkdFLCAnOicsIFJFRl9SQU5HRSBdLFxuICBbIENPTlRFWFQsICchJywgUkVGX1JBTkdFLCAnLjonLCBSRUZfUkFOR0UgXSxcbiAgWyBDT05URVhULCAnIScsIFJFRl9SQU5HRSwgJzouJywgUkVGX1JBTkdFIF0sXG4gIFsgQ09OVEVYVCwgJyEnLCBSRUZfUkFOR0UsICcuOi4nLCBSRUZfUkFOR0UgXSxcbiAgWyBDT05URVhULCAnIScsIFJFRl9SQU5HRSBdLFxuICBbIENPTlRFWFQsICchJywgUkVGX0JFQU0gXSxcbiAgWyBDT05URVhULCAnIScsIFJFRl9URVJOQVJZIF0sXG4gIFsgQ09OVEVYVF9RVU9URSwgJyEnLCBSRUZfUkFOR0UsICc6JywgUkVGX1JBTkdFIF0sXG4gIFsgQ09OVEVYVF9RVU9URSwgJyEnLCBSRUZfUkFOR0UsICcuOicsIFJFRl9SQU5HRSBdLFxuICBbIENPTlRFWFRfUVVPVEUsICchJywgUkVGX1JBTkdFLCAnOi4nLCBSRUZfUkFOR0UgXSxcbiAgWyBDT05URVhUX1FVT1RFLCAnIScsIFJFRl9SQU5HRSwgJy46LicsIFJFRl9SQU5HRSBdLFxuICBbIENPTlRFWFRfUVVPVEUsICchJywgUkVGX1JBTkdFIF0sXG4gIFsgQ09OVEVYVF9RVU9URSwgJyEnLCBSRUZfQkVBTSBdLFxuICBbIENPTlRFWFRfUVVPVEUsICchJywgUkVGX1RFUk5BUlkgXSxcbiAgWyBSRUZfTkFNRUQgXSxcbiAgWyBDT05URVhULCAnIScsIFJFRl9OQU1FRCBdLFxuICBbIENPTlRFWFRfUVVPVEUsICchJywgUkVGX05BTUVEIF0sXG4gIFsgUkVGX1NUUlVDVCBdLFxuICBbIFJFRl9OQU1FRCwgUkVGX1NUUlVDVCBdLFxuICBbIENPTlRFWFQsICchJywgUkVGX05BTUVELCBSRUZfU1RSVUNUIF0sXG4gIFsgQ09OVEVYVF9RVU9URSwgJyEnLCBSRUZfTkFNRUQsIFJFRl9TVFJVQ1QgXVxuXTtcblxuLy8gdmFsaWQgdG9rZW4gcnVucyBhcmUgY29udmVydGVkIHRvIGEgdHJlZSBzdHJ1Y3R1cmVcbmNvbnN0IHJlZlBhcnRzVHJlZSA9IHt9O1xuZnVuY3Rpb24gcGFja0xpc3QgKGYsIG5vZGUpIHtcbiAgaWYgKGYubGVuZ3RoKSB7XG4gICAgY29uc3Qga2V5ID0gZlswXTtcbiAgICBub2RlW2tleV0gPSBub2RlW2tleV0gfHwge307XG4gICAgcGFja0xpc3QoZi5zbGljZSgxKSwgbm9kZVtrZXldKTtcbiAgfVxuICBlbHNlIHtcbiAgICBub2RlW0VORF0gPSB0cnVlO1xuICB9XG59XG52YWxpZFJ1bnNNZXJnZS5mb3JFYWNoKHJ1biA9PiBwYWNrTGlzdChydW4uY29uY2F0KCkucmV2ZXJzZSgpLCByZWZQYXJ0c1RyZWUpKTtcblxuLy8gYXR0ZW1wdCB0byBtYXRjaCBhIGJhY2t3YXJkcyBydW4gb2YgdG9rZW5zIGZyb20gYSBnaXZlbiBwb2ludFxuLy8gdG8gYSBwYXRoIGluIHRoZSB0cmVlXG5jb25zdCBtYXRjaGVyID0gKHRva2VucywgY3Vyck5vZGUsIGFuY2hvckluZGV4LCBpbmRleCA9IDApID0+IHtcbiAgbGV0IGkgPSBpbmRleDtcbiAgbGV0IG5vZGUgPSBjdXJyTm9kZTtcbiAgY29uc3QgbWF4ID0gdG9rZW5zLmxlbmd0aCAtIGluZGV4O1xuICAvLyBrZWVwIHdhbGtpbmcgYXMgbG9uZyBhcyB0aGUgbmV4dCBiYWNrd2FyZCB0b2tlbiBtYXRjaGVzIGEgY2hpbGQga2V5XG4gIHdoaWxlIChpIDw9IG1heCkge1xuICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW2FuY2hvckluZGV4IC0gaV07XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBjb25zdCBrZXkgPSAodG9rZW4udHlwZSA9PT0gT1BFUkFUT1IpID8gdG9rZW4udmFsdWUgOiB0b2tlbi50eXBlO1xuICAgICAgaWYgKGtleSBpbiBub2RlKSB7XG4gICAgICAgIG5vZGUgPSBub2RlW2tleV07XG4gICAgICAgIGkgKz0gMTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGNhbid0IGFkdmFuY2UgZnVydGhlcjsgYWNjZXB0IG9ubHkgaWYgY3VycmVudCBub2RlIGlzIGEgdGVybWluYWxcbiAgICByZXR1cm4gbm9kZVtFTkRdID8gaSA6IDA7XG4gIH1cbn07XG5cbi8qKlxuICogTWVyZ2VzIGNvbnRleHQgd2l0aCByZWZlcmVuY2UgdG9rZW5zIGFzIHBvc3NpYmxlIGluIGEgbGlzdCBvZiB0b2tlbnMuXG4gKlxuICogV2hlbiBnaXZlbiBhIHRva2VubGlzdCwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgbmV3IGxpc3Qgd2l0aCByYW5nZXMgcmV0dXJuZWRcbiAqIGFzIHdob2xlIHJlZmVyZW5jZXMgKGBTaGVldDEhQTE6QjJgKSByYXRoZXIgdGhhbiBzZXBhcmF0ZSB0b2tlbnMgZm9yIGVhY2hcbiAqIHBhcnQ6IChgU2hlZXQxYCxgIWAsYEExYCxgOmAsYEIyYCkuXG4gKlxuICogQHBhcmFtIHtBcnJheTxUb2tlbj59IHRva2VubGlzdCBBbiBhcnJheSBvZiB0b2tlbnMgKGZyb20gYHRva2VuaXplKClgKVxuICogQHJldHVybnMge0FycmF5PFRva2VuPn0gQSBuZXcgbGlzdCBvZiB0b2tlbnMgd2l0aCByYW5nZSBwYXJ0cyBtZXJnZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVJlZlRva2VucyAodG9rZW5saXN0KSB7XG4gIGNvbnN0IGZpbmFsVG9rZW5zID0gW107XG4gIC8vIHRoaXMgc2Vla3MgYmFja3dhcmRzIGJlY2F1c2UgaXQncyByZWFsbHkgdGhlIHJhbmdlIHBhcnRcbiAgLy8gdGhhdCBjb250cm9scyB3aGF0IGNhbiBiZSBqb2luZWQuXG4gIGZvciAobGV0IGkgPSB0b2tlbmxpc3QubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBsZXQgdG9rZW4gPSB0b2tlbmxpc3RbaV07XG4gICAgY29uc3QgdHlwZSA9IHRva2VuLnR5cGU7XG4gICAgLy8gUXVpY2sgY2hlY2sgaWYgdG9rZW4gdHlwZSBjb3VsZCBldmVuIHN0YXJ0IGEgdmFsaWQgcnVuXG4gICAgaWYgKHR5cGUgPT09IFJFRl9SQU5HRSB8fCB0eXBlID09PSBSRUZfQkVBTSB8fCB0eXBlID09PSBSRUZfVEVSTkFSWSB8fFxuICAgICAgICB0eXBlID09PSBSRUZfTkFNRUQgfHwgdHlwZSA9PT0gUkVGX1NUUlVDVCkge1xuICAgICAgY29uc3QgdmFsaWQgPSBtYXRjaGVyKHRva2VubGlzdCwgcmVmUGFydHNUcmVlLCBpKTtcbiAgICAgIGlmICh2YWxpZCA+IDEpIHtcbiAgICAgICAgdG9rZW4gPSB7IC4uLnRva2VuLCB2YWx1ZTogJycgfTtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBpIC0gdmFsaWQgKyAxO1xuICAgICAgICBmb3IgKGxldCBqID0gc3RhcnQ7IGogPD0gaTsgaisrKSB7XG4gICAgICAgICAgdG9rZW4udmFsdWUgKz0gdG9rZW5saXN0W2pdLnZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGFkanVzdCB0aGUgb2Zmc2V0cyB0byBpbmNsdWRlIGFsbCB0aGUgdGV4dFxuICAgICAgICBpZiAodG9rZW4ubG9jICYmIHRva2VubGlzdFtzdGFydF0ubG9jKSB7XG4gICAgICAgICAgdG9rZW4ubG9jWzBdID0gdG9rZW5saXN0W3N0YXJ0XS5sb2NbMF07XG4gICAgICAgIH1cbiAgICAgICAgaSAtPSB2YWxpZCAtIDE7XG4gICAgICB9XG4gICAgfVxuICAgIGZpbmFsVG9rZW5zW2ZpbmFsVG9rZW5zLmxlbmd0aF0gPSB0b2tlbjtcbiAgfVxuICByZXR1cm4gZmluYWxUb2tlbnMucmV2ZXJzZSgpO1xufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tbWl4ZWQtb3BlcmF0b3JzICovXG5pbXBvcnQgeyBFUlJPUiB9IGZyb20gJy4uL2NvbnN0YW50cy5qcyc7XG5cbmNvbnN0IHJlX0VSUk9SID0gLyMoPzpOQU1FXFw/fEZJRUxEIXxDQUxDIXxWQUxVRSF8UkVGIXxESVZcXC8wIXxOVUxMIXxOVU0hfE5cXC9BfEdFVFRJTkdfREFUQVxcYnxTUElMTCF8VU5LTk9XTiF8U1lOVEFYXFw/fEVSUk9SIXxDT05ORUNUIXxCTE9DS0VEIXxFWFRFUk5BTCEpL2l5O1xuY29uc3QgSEFTSCA9IDM1O1xuXG5leHBvcnQgZnVuY3Rpb24gbGV4RXJyb3IgKHN0ciwgcG9zKSB7XG4gIGlmIChzdHIuY2hhckNvZGVBdChwb3MpID09PSBIQVNIKSB7XG4gICAgcmVfRVJST1IubGFzdEluZGV4ID0gcG9zO1xuICAgIGNvbnN0IG0gPSByZV9FUlJPUi5leGVjKHN0cik7XG4gICAgaWYgKG0pIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IEVSUk9SLCB2YWx1ZTogbVswXSB9O1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgV0hJVEVTUEFDRSB9IGZyb20gJy4uL2NvbnN0YW50cy5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dTIChjKSB7XG4gIHJldHVybiAoXG4gICAgYyA9PT0gMHg5IHx8XG4gICAgYyA9PT0gMHhCIHx8XG4gICAgYyA9PT0gMHhDIHx8XG4gICAgYyA9PT0gMHhEIHx8XG4gICAgYyA9PT0gMHgyMCB8fFxuICAgIGMgPT09IDB4QTAgfHxcbiAgICBjID09PSAweDE2ODAgfHxcbiAgICBjID09PSAweDIwMjggfHxcbiAgICBjID09PSAweDIwMjkgfHxcbiAgICBjID09PSAweDIwMmYgfHxcbiAgICBjID09PSAweDIwNWYgfHxcbiAgICBjID09PSAweDMwMDAgfHxcbiAgICBjID09PSAweGZlZmYgfHxcbiAgICAoYyA+PSAweDIwMDAgJiYgYyA8PSAweDIwMGEpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsZXhXaGl0ZXNwYWNlIChzdHIsIHBvcykge1xuICBjb25zdCBzdGFydCA9IHBvcztcbiAgd2hpbGUgKGlzV1Moc3RyLmNoYXJDb2RlQXQocG9zKSkpIHtcbiAgICBwb3MrKztcbiAgfVxuICBpZiAocG9zICE9PSBzdGFydCkge1xuICAgIHJldHVybiB7IHR5cGU6IFdISVRFU1BBQ0UsIHZhbHVlOiBzdHIuc2xpY2Uoc3RhcnQsIHBvcykgfTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgQ09OVEVYVCwgQ09OVEVYVF9RVU9URSB9IGZyb20gJy4uL2NvbnN0YW50cy5qcyc7XG5cbmNvbnN0IFFVT1RfU0lOR0xFID0gMzk7IC8vICdcbmNvbnN0IEJSX09QRU4gPSA5MTsgLy8gW1xuY29uc3QgQlJfQ0xPU0UgPSA5MzsgLy8gXVxuY29uc3QgRVhDTCA9IDMzOyAvLyAhXG5cbi8vIHhsc3ggeG1sIHVzZXMgYSB2YXJpYW50IG9mIHRoZSBzeW50YXggdGhhdCBoYXMgZXh0ZXJuYWwgcmVmZXJlbmNlcyBpblxuLy8gYnJhY2V0cy4gQW55IG9mOiBbMV1TaGVldDEhQTEsICdbMV1TaGVldCBvbmUnIUExLCBbMV0hbmFtZWRcbmV4cG9ydCBmdW5jdGlvbiBsZXhDb250ZXh0IChzdHIsIHBvcywgb3B0aW9ucykge1xuICBjb25zdCBjMCA9IHN0ci5jaGFyQ29kZUF0KHBvcyk7XG4gIGxldCBicjE7XG4gIGxldCBicjI7XG4gIC8vIHF1b3RlZCBjb250ZXh0OiAnKD86Jyd8W14nXSkqKCd8JCkoPz0hKVxuICBpZiAoYzAgPT09IFFVT1RfU0lOR0xFKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBwb3M7XG4gICAgcG9zKys7XG4gICAgd2hpbGUgKHBvcyA8IHN0ci5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IGMgPSBzdHIuY2hhckNvZGVBdChwb3MpO1xuICAgICAgaWYgKGMgPT09IEJSX09QRU4pIHtcbiAgICAgICAgaWYgKGJyMSkgeyByZXR1cm47IH0gLy8gb25seSAxIGFsbG93ZWRcbiAgICAgICAgYnIxID0gcG9zO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYyA9PT0gQlJfQ0xPU0UpIHtcbiAgICAgICAgaWYgKGJyMikgeyByZXR1cm47IH0gLy8gb25seSAxIGFsbG93ZWRcbiAgICAgICAgYnIyID0gcG9zO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYyA9PT0gUVVPVF9TSU5HTEUpIHtcbiAgICAgICAgcG9zKys7XG4gICAgICAgIGlmIChzdHIuY2hhckNvZGVBdChwb3MpICE9PSBRVU9UX1NJTkdMRSkge1xuICAgICAgICAgIGxldCB2YWxpZCA9IGJyMSA9PSBudWxsICYmIGJyMiA9PSBudWxsO1xuICAgICAgICAgIGlmIChvcHRpb25zLnhsc3ggJiYgKGJyMSA9PT0gc3RhcnQgKyAxKSAmJiAoYnIyID09PSBwb3MgLSAyKSkge1xuICAgICAgICAgICAgdmFsaWQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoKGJyMSA+PSBzdGFydCArIDEpICYmIChicjIgPCBwb3MgLSAyKSAmJiAoYnIyID4gYnIxICsgMSkpIHtcbiAgICAgICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHZhbGlkICYmIHN0ci5jaGFyQ29kZUF0KHBvcykgPT09IEVYQ0wpIHtcbiAgICAgICAgICAgIHJldHVybiB7IHR5cGU6IENPTlRFWFRfUVVPVEUsIHZhbHVlOiBzdHIuc2xpY2Uoc3RhcnQsIHBvcykgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBwb3MrKztcbiAgICB9XG4gIH1cbiAgLy8gdW5xdW90ZWQgY29udGV4dFxuICBlbHNlIGlmIChjMCAhPT0gRVhDTCkge1xuICAgIGNvbnN0IHN0YXJ0ID0gcG9zO1xuICAgIHdoaWxlIChwb3MgPCBzdHIubGVuZ3RoKSB7XG4gICAgICBjb25zdCBjID0gc3RyLmNoYXJDb2RlQXQocG9zKTtcbiAgICAgIGlmIChjID09PSBCUl9PUEVOKSB7XG4gICAgICAgIGlmIChicjEpIHsgcmV0dXJuOyB9IC8vIG9ubHkgMSBhbGxvd2VkXG4gICAgICAgIGJyMSA9IHBvcztcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGMgPT09IEJSX0NMT1NFKSB7XG4gICAgICAgIGlmIChicjIpIHsgcmV0dXJuOyB9IC8vIG9ubHkgMSBhbGxvd2VkXG4gICAgICAgIGJyMiA9IHBvcztcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGMgPT09IEVYQ0wpIHtcbiAgICAgICAgbGV0IHZhbGlkID0gYnIxID09IG51bGwgJiYgYnIyID09IG51bGw7XG4gICAgICAgIGlmIChvcHRpb25zLnhsc3ggJiYgKGJyMSA9PT0gc3RhcnQpICYmIChicjIgPT09IHBvcyAtIDEpKSB7XG4gICAgICAgICAgdmFsaWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoYnIxID49IHN0YXJ0KSAmJiAoYnIyIDwgcG9zIC0gMSkgJiYgKGJyMiA+IGJyMSArIDEpKSB7XG4gICAgICAgICAgdmFsaWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgIHJldHVybiB7IHR5cGU6IENPTlRFWFQsIHZhbHVlOiBzdHIuc2xpY2Uoc3RhcnQsIHBvcykgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoXG4gICAgICAgIChicjEgPT0gbnVsbCB8fCBicjIgIT0gbnVsbCkgJiZcbiAgICAgICAgLy8gWzAtOUEtWmEtei5fwqHCpMKnwqjCqlxcdTAwYWTCry1cXHVmZmZmXVxuICAgICAgICAhKFxuICAgICAgICAgIChjID49IDY1ICYmIGMgPD0gOTApIHx8IC8vIEEtWlxuICAgICAgICAgIChjID49IDk3ICYmIGMgPD0gMTIyKSB8fCAvLyBhLXpcbiAgICAgICAgICAoYyA+PSA0OCAmJiBjIDw9IDU3KSB8fCAvLyAwLTlcbiAgICAgICAgICAoYyA9PT0gNDYpIHx8IC8vIC5cbiAgICAgICAgICAoYyA9PT0gOTUpIHx8IC8vIF9cbiAgICAgICAgICAoYyA9PT0gMTYxKSB8fCAvLyDCoVxuICAgICAgICAgIChjID09PSAxNjQpIHx8IC8vIMKkXG4gICAgICAgICAgKGMgPT09IDE2NykgfHwgLy8gwqdcbiAgICAgICAgICAoYyA9PT0gMTY4KSB8fCAvLyDCqFxuICAgICAgICAgIChjID09PSAxNzApIHx8IC8vIMKqXG4gICAgICAgICAgKGMgPT09IDE3MykgfHwgLy8gXFx1MDBhZFxuICAgICAgICAgIChjID49IDE3NSkgICAgLy8gwq8tXFx1ZmZmZlxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gMC05QS1aYS16Ll/CocKkwqfCqMKqXFx1MDBhZMKvLVxcdWZmZmZcbiAgICAgIHBvcysrO1xuICAgIH1cbiAgfVxufVxuIiwiY29uc3QgUEVSSU9EID0gNDY7XG5jb25zdCBDT0xPTiA9IDU4O1xuXG5leHBvcnQgZnVuY3Rpb24gYWR2UmFuZ2VPcCAoc3RyLCBwb3MpIHtcbiAgY29uc3QgYzAgPSBzdHIuY2hhckNvZGVBdChwb3MpO1xuICBpZiAoYzAgPT09IFBFUklPRCkge1xuICAgIGNvbnN0IGMxID0gc3RyLmNoYXJDb2RlQXQocG9zICsgMSk7XG4gICAgaWYgKGMxID09PSBDT0xPTikge1xuICAgICAgcmV0dXJuIHN0ci5jaGFyQ29kZUF0KHBvcyArIDIpID09PSBQRVJJT0QgPyAzIDogMjtcbiAgICB9XG4gIH1cbiAgZWxzZSBpZiAoYzAgPT09IENPTE9OKSB7XG4gICAgY29uc3QgYzEgPSBzdHIuY2hhckNvZGVBdChwb3MgKyAxKTtcbiAgICByZXR1cm4gYzEgPT09IFBFUklPRCA/IDIgOiAxO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG4iLCIvLyByZWd1bGFyOiBbQS1aYS16MC05X1xcdTAwYTEtXFx1ZmZmZl1cbmV4cG9ydCBmdW5jdGlvbiBjYW5FbmRSYW5nZSAoc3RyLCBwb3MpIHtcbiAgY29uc3QgYyA9IHN0ci5jaGFyQ29kZUF0KHBvcyk7XG4gIHJldHVybiAhKFxuICAgIChjID49IDY1ICYmIGMgPD0gOTApIHx8IC8vIEEtWlxuICAgIChjID49IDk3ICYmIGMgPD0gMTIyKSB8fCAvLyBhLXpcbiAgICAoYyA+PSA0OCAmJiBjIDw9IDU3KSB8fCAvLyAwLTlcbiAgICAoYyA9PT0gOTUpIHx8IC8vIF9cbiAgICAoYyA+IDB4QTApIC8vIFxcdTAwYTEtXFx1ZmZmZlxuICApO1xufVxuXG4vLyBwYXJ0aWFsOiBbQS1aYS16MC05XygkLl1cbmV4cG9ydCBmdW5jdGlvbiBjYW5FbmRQYXJ0aWFsUmFuZ2UgKHN0ciwgcG9zKSB7XG4gIGNvbnN0IGMgPSBzdHIuY2hhckNvZGVBdChwb3MpO1xuICByZXR1cm4gIShcbiAgICAoYyA+PSA2NSAmJiBjIDw9IDkwKSB8fCAvLyBBLVpcbiAgICAoYyA+PSA5NyAmJiBjIDw9IDEyMikgfHwgLy8gYS16XG4gICAgKGMgPj0gNDggJiYgYyA8PSA1NykgfHwgLy8gMC05XG4gICAgKGMgPT09IDk1KSB8fCAvLyBfXG4gICAgKGMgPT09IDQwKSB8fCAvLyAoXG4gICAgKGMgPT09IDM2KSB8fCAvLyAkXG4gICAgKGMgPT09IDQ2KSAvLyAuXG4gICk7XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1taXhlZC1vcGVyYXRvcnMgKi9cbmltcG9ydCB7IFJFRl9SQU5HRSwgUkVGX0JFQU0sIFJFRl9URVJOQVJZLCBNQVhfQ09MUywgTUFYX1JPV1MgfSBmcm9tICcuLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgYWR2UmFuZ2VPcCB9IGZyb20gJy4vYWR2UmFuZ2VPcC5qcyc7XG5pbXBvcnQgeyBjYW5FbmRSYW5nZSwgY2FuRW5kUGFydGlhbFJhbmdlIH0gZnJvbSAnLi9jYW5FbmRSYW5nZS5qcyc7XG5cbmZ1bmN0aW9uIGFkdkExQ29sIChzdHIsIHBvcykge1xuICAvLyBbQS1aXXsxLDN9XG4gIGNvbnN0IHN0YXJ0ID0gcG9zO1xuICBpZiAoc3RyLmNoYXJDb2RlQXQocG9zKSA9PT0gMzYpIHsgLy8gJFxuICAgIHBvcysrO1xuICB9XG4gIGNvbnN0IHN0b3AgPSBwb3MgKyAzO1xuICBsZXQgY29sID0gMDtcbiAgZG8ge1xuICAgIGNvbnN0IGMgPSBzdHIuY2hhckNvZGVBdChwb3MpO1xuICAgIGlmIChjID49IDY1ICYmIGMgPD0gOTApIHsgLy8gQS1aXG4gICAgICBjb2wgPSAyNiAqIGNvbCArIGMgLSA2NDtcbiAgICAgIHBvcysrO1xuICAgIH1cbiAgICBlbHNlIGlmIChjID49IDk3ICYmIGMgPD0gMTIyKSB7IC8vIGEtelxuICAgICAgY29sID0gMjYgKiBjb2wgKyBjIC0gOTY7XG4gICAgICBwb3MrKztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgd2hpbGUgKHBvcyA8IHN0b3AgJiYgcG9zIDwgc3RyLmxlbmd0aCk7XG4gIHJldHVybiAoY29sICYmIGNvbCA8PSBNQVhfQ09MUyArIDEpID8gcG9zIC0gc3RhcnQgOiAwO1xufVxuXG5mdW5jdGlvbiBhZHZBMVJvdyAoc3RyLCBwb3MpIHtcbiAgLy8gWzEtOV1bMC05XXswLDZ9XG4gIGNvbnN0IHN0YXJ0ID0gcG9zO1xuICBpZiAoc3RyLmNoYXJDb2RlQXQocG9zKSA9PT0gMzYpIHsgLy8gJFxuICAgIHBvcysrO1xuICB9XG4gIGNvbnN0IHN0b3AgPSBwb3MgKyA3O1xuICBsZXQgcm93ID0gMDtcbiAgbGV0IGMgPSBzdHIuY2hhckNvZGVBdChwb3MpO1xuICBpZiAoYyA+PSA0OSAmJiBjIDw9IDU3KSB7IC8vIDEtOVxuICAgIHJvdyA9IHJvdyAqIDEwICsgYyAtIDQ4O1xuICAgIHBvcysrO1xuICAgIGRvIHtcbiAgICAgIGMgPSBzdHIuY2hhckNvZGVBdChwb3MpO1xuICAgICAgaWYgKGMgPj0gNDggJiYgYyA8PSA1NykgeyAvLyAwLTlcbiAgICAgICAgcm93ID0gcm93ICogMTAgKyBjIC0gNDg7XG4gICAgICAgIHBvcysrO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB3aGlsZSAocG9zIDwgc3RvcCAmJiBwb3MgPCBzdHIubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gKHJvdyAmJiByb3cgPD0gTUFYX1JPV1MgKyAxKSA/IHBvcyAtIHN0YXJ0IDogMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxleFJhbmdlQTEgKHN0ciwgcG9zLCBvcHRpb25zKSB7XG4gIGxldCBwID0gcG9zO1xuICBjb25zdCBsZWZ0ID0gYWR2QTFDb2woc3RyLCBwKTtcbiAgbGV0IHJpZ2h0ID0gMDtcbiAgbGV0IGJvdHRvbSA9IDA7XG4gIGlmIChsZWZ0KSB7XG4gICAgLy8gVExCUjogY291bGQgYmUgQTE6QTFcbiAgICAvLyBUTCBSOiBjb3VsZCBiZSBBMTpBIChpZiBhbGxvd1Rlcm5hcnkpXG4gICAgLy8gVExCIDogY291bGQgYmUgQTE6MSAoaWYgYWxsb3dUZXJuYXJ5KVxuICAgIC8vICBMQlI6IGNvdWxkIGJlIEE6QTEgKGlmIGFsbG93VGVybmFyeSlcbiAgICAvLyAgTCBSOiBjb3VsZCBiZSBBOkFcbiAgICBwICs9IGxlZnQ7XG4gICAgY29uc3QgdG9wID0gYWR2QTFSb3coc3RyLCBwKTtcbiAgICBwICs9IHRvcDtcbiAgICBjb25zdCBvcCA9IGFkdlJhbmdlT3Aoc3RyLCBwKTtcbiAgICBjb25zdCBwcmVPcCA9IHA7XG4gICAgaWYgKG9wKSB7XG4gICAgICBwICs9IG9wO1xuICAgICAgcmlnaHQgPSBhZHZBMUNvbChzdHIsIHApO1xuICAgICAgcCArPSByaWdodDtcbiAgICAgIGJvdHRvbSA9IGFkdkExUm93KHN0ciwgcCk7XG4gICAgICBwICs9IGJvdHRvbTtcbiAgICAgIGlmICh0b3AgJiYgYm90dG9tICYmIHJpZ2h0KSB7XG4gICAgICAgIGlmIChjYW5FbmRSYW5nZShzdHIsIHApICYmIG9wdGlvbnMubWVyZ2VSZWZzKSB7XG4gICAgICAgICAgcmV0dXJuIHsgdHlwZTogUkVGX1JBTkdFLCB2YWx1ZTogc3RyLnNsaWNlKHBvcywgcCkgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoIXRvcCAmJiAhYm90dG9tKSB7XG4gICAgICAgIGlmIChjYW5FbmRSYW5nZShzdHIsIHApKSB7XG4gICAgICAgICAgcmV0dXJuIHsgdHlwZTogUkVGX0JFQU0sIHZhbHVlOiBzdHIuc2xpY2UocG9zLCBwKSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChvcHRpb25zLmFsbG93VGVybmFyeSAmJiAoYm90dG9tIHx8IHJpZ2h0KSkge1xuICAgICAgICBpZiAoY2FuRW5kUGFydGlhbFJhbmdlKHN0ciwgcCkpIHtcbiAgICAgICAgICByZXR1cm4geyB0eXBlOiBSRUZfVEVSTkFSWSwgdmFsdWU6IHN0ci5zbGljZShwb3MsIHApIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gTFQgIDogdGhpcyBpcyBBMVxuICAgIGlmICh0b3AgJiYgY2FuRW5kUmFuZ2Uoc3RyLCBwcmVPcCkpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IFJFRl9SQU5HRSwgdmFsdWU6IHN0ci5zbGljZShwb3MsIHByZU9wKSB9O1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICAvLyBUIEIgOiBjb3VsZCBiZSAxOjFcbiAgICAvLyBUIEJSOiBjb3VsZCBiZSAxOkExIChpZiBhbGxvd1Rlcm5hcnkpXG4gICAgY29uc3QgdG9wID0gYWR2QTFSb3coc3RyLCBwKTtcbiAgICBpZiAodG9wKSB7XG4gICAgICBwICs9IHRvcDtcbiAgICAgIGNvbnN0IG9wID0gYWR2UmFuZ2VPcChzdHIsIHApO1xuICAgICAgaWYgKG9wKSB7XG4gICAgICAgIHAgKz0gb3A7XG4gICAgICAgIHJpZ2h0ID0gYWR2QTFDb2woc3RyLCBwKTtcbiAgICAgICAgaWYgKHJpZ2h0KSB7XG4gICAgICAgICAgcCArPSByaWdodDtcbiAgICAgICAgfVxuICAgICAgICBib3R0b20gPSBhZHZBMVJvdyhzdHIsIHApO1xuICAgICAgICBwICs9IGJvdHRvbTtcbiAgICAgICAgaWYgKHJpZ2h0ICYmIGJvdHRvbSAmJiBvcHRpb25zLmFsbG93VGVybmFyeSkge1xuICAgICAgICAgIGlmIChjYW5FbmRQYXJ0aWFsUmFuZ2Uoc3RyLCBwKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogUkVGX1RFUk5BUlksIHZhbHVlOiBzdHIuc2xpY2UocG9zLCBwKSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXJpZ2h0ICYmIGJvdHRvbSkge1xuICAgICAgICAgIGlmIChjYW5FbmRSYW5nZShzdHIsIHApKSB7XG4gICAgICAgICAgICByZXR1cm4geyB0eXBlOiBSRUZfQkVBTSwgdmFsdWU6IHN0ci5zbGljZShwb3MsIHApIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1taXhlZC1vcGVyYXRvcnMgKi9cbmltcG9ydCB7IFJFRl9SQU5HRSwgUkVGX0JFQU0sIFJFRl9URVJOQVJZLCBNQVhfQ09MUywgTUFYX1JPV1MgfSBmcm9tICcuLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgYWR2UmFuZ2VPcCB9IGZyb20gJy4vYWR2UmFuZ2VPcC5qcyc7XG5pbXBvcnQgeyBjYW5FbmRSYW5nZSB9IGZyb20gJy4vY2FuRW5kUmFuZ2UuanMnO1xuXG5jb25zdCBCUl9PUEVOID0gOTE7IC8vIFtcbmNvbnN0IEJSX0NMT1NFID0gOTM7IC8vIF1cbmNvbnN0IFVDX1IgPSA4MjtcbmNvbnN0IExDX1IgPSAxMTQ7XG5jb25zdCBVQ19DID0gNjc7XG5jb25zdCBMQ19DID0gOTk7XG5jb25zdCBQTFVTID0gNDM7XG5jb25zdCBNSU5VUyA9IDQ1O1xuXG4vLyBDXG4vLyBDXFxbWystXT9cXGQrXFxdXG4vLyBDWzEtOV1bMC05XXswLDR9XG4vLyBSXG4vLyBSXFxbWystXT9cXGQrXFxdXG4vLyBSWzEtOV1bMC05XXswLDZ9XG5mdW5jdGlvbiBsZXhSMUMxUGFydCAoc3RyLCBwb3MsIGlzUm93ID0gZmFsc2UpIHtcbiAgY29uc3Qgc3RhcnQgPSBwb3M7XG4gIGNvbnN0IGMwID0gc3RyLmNoYXJDb2RlQXQocG9zKTtcbiAgaWYgKChpc1JvdyA/IGMwID09PSBVQ19SIHx8IGMwID09PSBMQ19SIDogYzAgPT09IFVDX0MgfHwgYzAgPT09IExDX0MpKSB7XG4gICAgcG9zKys7XG4gICAgbGV0IGRpZ2l0cyA9IDA7XG4gICAgbGV0IHZhbHVlID0gMDtcbiAgICBsZXQgc3RvcCA9IHN0ci5sZW5ndGg7XG4gICAgY29uc3QgYzEgPSBzdHIuY2hhckNvZGVBdChwb3MpO1xuICAgIGxldCBjO1xuICAgIGxldCBzaWduID0gMTtcbiAgICBjb25zdCByZWxhdGl2ZSA9IGMxID09PSBCUl9PUEVOO1xuICAgIGlmIChyZWxhdGl2ZSkge1xuICAgICAgc3RvcCA9IE1hdGgubWluKHN0b3AsIHBvcyArIChpc1JvdyA/IDggOiA2KSk7XG4gICAgICBwb3MrKztcbiAgICAgIC8vIGFsbG93ICstXG4gICAgICBjID0gc3RyLmNoYXJDb2RlQXQocG9zKTtcbiAgICAgIGlmIChjID09PSBQTFVTIHx8IGMgPT09IE1JTlVTKSB7XG4gICAgICAgIHBvcysrO1xuICAgICAgICBzdG9wKys7XG4gICAgICAgIHNpZ24gPSBjID09PSBNSU5VUyA/IC0xIDogMTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoYzEgPCA0OSB8fCBjMSA+IDU3IHx8IGlzTmFOKGMxKSkge1xuICAgICAgLy8gY2hhciBtdXN0IGJlIDEtOSwgb3IgcGFydCBpcyBlaXRoZXIganVzdCBcIlJcIiBvciBcIkNcIlxuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgZG8ge1xuICAgICAgY29uc3QgYyA9IHN0ci5jaGFyQ29kZUF0KHBvcyk7XG4gICAgICBpZiAoYyA+PSA0OCAmJiBjIDw9IDU3KSB7IC8vIDAtOVxuICAgICAgICB2YWx1ZSA9IHZhbHVlICogMTAgKyBjIC0gNDg7XG4gICAgICAgIGRpZ2l0cysrO1xuICAgICAgICBwb3MrKztcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gICAgd2hpbGUgKHBvcyA8IHN0b3ApO1xuXG4gICAgY29uc3QgTUFYID0gaXNSb3cgPyBNQVhfUk9XUyA6IE1BWF9DT0xTO1xuICAgIGlmIChyZWxhdGl2ZSkge1xuICAgICAgY29uc3QgYyA9IHN0ci5jaGFyQ29kZUF0KHBvcyk7XG4gICAgICBpZiAoYyAhPT0gQlJfQ0xPU0UpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgICAvLyBpc1JvdzogbmV4dCBjaGFyIG11c3Qgbm90IGJlIGEgbnVtYmVyIVxuICAgICAgcG9zKys7XG4gICAgICB2YWx1ZSAqPSBzaWduO1xuICAgICAgcmV0dXJuIChkaWdpdHMgJiYgKC1NQVggPD0gdmFsdWUpICYmICh2YWx1ZSA8PSBNQVgpKVxuICAgICAgICA/IHBvcyAtIHN0YXJ0XG4gICAgICAgIDogMDtcbiAgICB9XG4gICAgLy8gaXNSb3c6IG5leHQgY2hhciBtdXN0IG5vdCBiZSBhIG51bWJlciFcbiAgICByZXR1cm4gKGRpZ2l0cyAmJiB2YWx1ZSA8PSAoTUFYICsgMSkpID8gcG9zIC0gc3RhcnQgOiAwO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGV4UmFuZ2VSMUMxIChzdHIsIHBvcywgb3B0aW9ucykge1xuICBsZXQgcCA9IHBvcztcbiAgLy8gQzFcbiAgLy8gQzE6QzFcbiAgLy8gQzE6UjFDMSAgLS1wYXJ0aWFsXG4gIC8vIFIxXG4gIC8vIFIxOlIxXG4gIC8vIFIxOlIxQzEgIC0tcGFydGlhbFxuICAvLyBSMUMxXG4gIC8vIFIxQzE6QzEgIC0tcGFydGlhbFxuICAvLyBSMUMxOlIxICAtLXBhcnRpYWxcbiAgY29uc3QgcjEgPSBsZXhSMUMxUGFydChzdHIsIHAsIHRydWUpO1xuICBwICs9IHIxO1xuICBjb25zdCBjMSA9IGxleFIxQzFQYXJ0KHN0ciwgcCk7XG4gIHAgKz0gYzE7XG4gIGlmIChjMSB8fCByMSkge1xuICAgIGNvbnN0IG9wID0gYWR2UmFuZ2VPcChzdHIsIHApO1xuICAgIGNvbnN0IHByZU9wID0gcDtcbiAgICBpZiAob3ApIHtcbiAgICAgIHAgKz0gb3A7XG4gICAgICBjb25zdCByMiA9IGxleFIxQzFQYXJ0KHN0ciwgcCwgdHJ1ZSk7IC8vIFIxXG4gICAgICBwICs9IHIyO1xuICAgICAgY29uc3QgYzIgPSBsZXhSMUMxUGFydChzdHIsIHApOyAvLyBDMVxuICAgICAgcCArPSBjMjtcblxuICAgICAgLy8gQzE6UjJDMiAgLS1wYXJ0aWFsXG4gICAgICAvLyBSMTpSMkMyICAtLXBhcnRpYWxcbiAgICAgIC8vIFIxQzE6QzIgIC0tcGFydGlhbFxuICAgICAgLy8gUjFDMTpSMiAgLS1wYXJ0aWFsXG4gICAgICBpZiAoXG4gICAgICAgIChyMSAmJiAhYzEgJiYgcjIgJiYgYzIpIHx8XG4gICAgICAgICghcjEgJiYgYzEgJiYgcjIgJiYgYzIpIHx8XG4gICAgICAgIChyMSAmJiBjMSAmJiByMiAmJiAhYzIpIHx8XG4gICAgICAgIChyMSAmJiBjMSAmJiAhcjIgJiYgYzIpXG4gICAgICApIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuYWxsb3dUZXJuYXJ5ICYmIGNhbkVuZFJhbmdlKHN0ciwgcCkpIHtcbiAgICAgICAgICByZXR1cm4geyB0eXBlOiBSRUZfVEVSTkFSWSwgdmFsdWU6IHN0ci5zbGljZShwb3MsIHApIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEMxOkMyIC0tIGJlYW1cbiAgICAgIC8vIFIxOlIyIC0tIGJlYW1cbiAgICAgIGVsc2UgaWYgKFxuICAgICAgICAoYzEgJiYgYzIgJiYgIXIxICYmICFyMikgfHxcbiAgICAgICAgKCFjMSAmJiAhYzIgJiYgcjEgJiYgcjIpXG4gICAgICApIHtcbiAgICAgICAgaWYgKGNhbkVuZFJhbmdlKHN0ciwgcCkpIHtcbiAgICAgICAgICByZXR1cm4geyB0eXBlOiBSRUZfQkVBTSwgdmFsdWU6IHN0ci5zbGljZShwb3MsIHApIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIE5vdGU6IHdlIGRvIG5vdCBjYXB0dXJlIFIxQzE6UjFDMSwgbWVyZ2VSZWZUb2tlbnMgd2lsbCBqb2luIHRoZSBwYXJ0c1xuICAgIH1cbiAgICAvLyBSMVxuICAgIC8vIEMxXG4gICAgLy8gUjFDMVxuICAgIGlmIChjYW5FbmRSYW5nZShzdHIsIHByZU9wKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogKHIxICYmIGMxKSA/IFJFRl9SQU5HRSA6IFJFRl9CRUFNLFxuICAgICAgICB2YWx1ZTogc3RyLnNsaWNlKHBvcywgcHJlT3ApXG4gICAgICB9O1xuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IHsgbGV4UmFuZ2VBMSB9IGZyb20gJy4vbGV4UmFuZ2VBMS5qcyc7XG5pbXBvcnQgeyBsZXhSYW5nZVIxQzEgfSBmcm9tICcuL2xleFJhbmdlUjFDMS5qcyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBsZXhSYW5nZSAoc3RyLCBwb3MsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIG9wdGlvbnMucjFjMVxuICAgID8gbGV4UmFuZ2VSMUMxKHN0ciwgcG9zLCBvcHRpb25zKVxuICAgIDogbGV4UmFuZ2VBMShzdHIsIHBvcywgb3B0aW9ucyk7XG59XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby1tdWx0aS1zcGFjZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVmaW5lZCAqL1xuaW1wb3J0IHsgaXNXUyB9IGZyb20gJy4vbGV4ZXJzL2xleFdoaXRlc3BhY2UuanMnO1xuXG5jb25zdCBBVCA9IDY0OyAvLyBAXG5jb25zdCBCUl9DTE9TRSA9IDkzOyAvLyBdXG5jb25zdCBCUl9PUEVOID0gOTE7IC8vIFtcbmNvbnN0IENPTE9OID0gNTg7IC8vIDpcbmNvbnN0IENPTU1BID0gNDQ7IC8vICxcbmNvbnN0IEhBU0ggPSAzNTsgLy8gI1xuY29uc3QgUVVPVF9TSU5HTEUgPSAzOTsgLy8gJ1xuXG5jb25zdCBrZXlUZXJtcyA9IHtcbiAgJ2hlYWRlcnMnOiAxLFxuICAnZGF0YSc6IDIsXG4gICd0b3RhbHMnOiA0LFxuICAnYWxsJzogOCxcbiAgJ3RoaXMgcm93JzogMTYsXG4gICdAJzogMTZcbn07XG5cbi8vIG9ubHkgY29tYmluYXRpb25zIGFsbG93ZWQgYXJlOiAjZGF0YSArICgjaGVhZGVycyB8ICN0b3RhbHMgfCAjZGF0YSlcbmNvbnN0IGZ6ID0gKC4uLmEpID0+IE9iamVjdC5mcmVlemUoYSk7XG5jb25zdCBzZWN0aW9uTWFwID0ge1xuICAvLyBubyB0ZXJtc1xuICAwOiBmeigpLFxuICAvLyBzaW5nbGUgdGVybVxuICAxOiBmeignaGVhZGVycycpLFxuICAyOiBmeignZGF0YScpLFxuICA0OiBmeigndG90YWxzJyksXG4gIDg6IGZ6KCdhbGwnKSxcbiAgMTY6IGZ6KCd0aGlzIHJvdycpLFxuICAvLyBoZWFkZXJzK2RhdGFcbiAgMzogZnooJ2hlYWRlcnMnLCAnZGF0YScpLFxuICAvLyB0b3RhbHMrZGF0YVxuICA2OiBmeignZGF0YScsICd0b3RhbHMnKVxufTtcblxuZnVuY3Rpb24gbWF0Y2hLZXl3b3JkIChzdHIsIHBvcykge1xuICBsZXQgcCA9IHBvcztcbiAgaWYgKHN0ci5jaGFyQ29kZUF0KHArKykgIT09IEJSX09QRU4pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKHN0ci5jaGFyQ29kZUF0KHArKykgIT09IEhBU0gpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZG8ge1xuICAgIGNvbnN0IGMgPSBzdHIuY2hhckNvZGVBdChwKTtcbiAgICBpZiAoXG4gICAgICAoYyA+PSA2NSAmJiBjIDw9IDkwKSB8fCAvLyBBLVpcbiAgICAgIChjID49IDk3ICYmIGMgPD0gMTIyKSB8fCAvLyBhLXpcbiAgICAgIChjID09PSAzMikgLy8gc3BhY2VcbiAgICApIHtcbiAgICAgIHArKztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgd2hpbGUgKHAgPCBwb3MgKyAxMSk7IC8vIG1heCBsZW5ndGg6ICdbI3RoaXMgcm93J1xuICBpZiAoc3RyLmNoYXJDb2RlQXQocCsrKSAhPT0gQlJfQ0xPU0UpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcmV0dXJuIHAgLSBwb3M7XG59XG5cbmZ1bmN0aW9uIHNraXBXaGl0ZXNwYWNlIChzdHIsIHBvcykge1xuICBsZXQgcCA9IHBvcztcbiAgd2hpbGUgKGlzV1Moc3RyLmNoYXJDb2RlQXQocCkpKSB7IHArKzsgfVxuICByZXR1cm4gcCAtIHBvcztcbn1cblxuZnVuY3Rpb24gbWF0Y2hDb2x1bW4gKHN0ciwgcG9zLCBhbGxvd1VuYnJhY2VkID0gdHJ1ZSkge1xuICBsZXQgcCA9IHBvcztcbiAgbGV0IGNvbHVtbiA9ICcnO1xuICBpZiAoc3RyLmNoYXJDb2RlQXQocCkgPT09IEJSX09QRU4pIHtcbiAgICBwKys7XG4gICAgbGV0IGM7XG4gICAgZG8ge1xuICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KHApO1xuICAgICAgaWYgKGMgPT09IFFVT1RfU0lOR0xFKSB7XG4gICAgICAgIHArKztcbiAgICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KHApO1xuICAgICAgICAvLyBBbGxvd2VkIHNldDogJyNAW11cbiAgICAgICAgaWYgKGMgPT09IFFVT1RfU0lOR0xFIHx8IGMgPT09IEhBU0ggfHwgYyA9PT0gQVQgfHwgYyA9PT0gQlJfT1BFTiB8fCBjID09PSBCUl9DTE9TRSkge1xuICAgICAgICAgIGNvbHVtbiArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuICAgICAgICAgIHArKztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8vIEFsbG93ZWQgc2V0IGlzIGFsbCBjaGFycyBCVVQ6ICcjQFtdXG4gICAgICBlbHNlIGlmIChjID09PSBRVU9UX1NJTkdMRSB8fCBjID09PSBIQVNIIHx8IGMgPT09IEFUIHx8IGMgPT09IEJSX09QRU4pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoYyA9PT0gQlJfQ0xPU0UpIHtcbiAgICAgICAgcCsrO1xuICAgICAgICByZXR1cm4gWyBzdHIuc2xpY2UocG9zLCBwKSwgY29sdW1uIF07XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29sdW1uICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYyk7XG4gICAgICAgIHArKztcbiAgICAgIH1cbiAgICB9XG4gICAgd2hpbGUgKHAgPCBzdHIubGVuZ3RoKTtcbiAgfVxuICBlbHNlIGlmIChhbGxvd1VuYnJhY2VkKSB7XG4gICAgbGV0IGM7XG4gICAgZG8ge1xuICAgICAgYyA9IHN0ci5jaGFyQ29kZUF0KHApO1xuICAgICAgLy8gQWxsb3dlZCBzZXQgaXMgYWxsIGNoYXJzIEJVVDogJyNAW106XG4gICAgICBpZiAoYyA9PT0gUVVPVF9TSU5HTEUgfHwgYyA9PT0gSEFTSCB8fCBjID09PSBBVCB8fCBjID09PSBCUl9PUEVOIHx8IGMgPT09IEJSX0NMT1NFIHx8IGMgPT09IENPTE9OKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNvbHVtbiArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuICAgICAgICBwKys7XG4gICAgICB9XG4gICAgfVxuICAgIHdoaWxlIChwIDwgc3RyLmxlbmd0aCk7XG4gICAgaWYgKHAgIT09IHBvcykge1xuICAgICAgcmV0dXJuIFsgY29sdW1uLCBjb2x1bW4gXTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU1JhbmdlIChzdHIsIHBvcyA9IDApIHtcbiAgY29uc3QgY29sdW1ucyA9IFtdO1xuICBjb25zdCBzdGFydCA9IHBvcztcbiAgbGV0IG07XG4gIGxldCB0ZXJtcyA9IDA7XG5cbiAgLy8gc3RydWN0dXJlZCByZWZzIHN0YXJ0IHdpdGggYSBbXG4gIGlmIChzdHIuY2hhckNvZGVBdChwb3MpICE9PSBCUl9PUEVOKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gc2ltcGxlIGtleXdvcmQ6IFsja2V5d29yZF1cbiAgaWYgKChtID0gbWF0Y2hLZXl3b3JkKHN0ciwgcG9zKSkpIHtcbiAgICBjb25zdCBrID0gc3RyLnNsaWNlKHBvcyArIDIsIHBvcyArIG0gLSAxKTtcbiAgICBwb3MgKz0gbTtcbiAgICBjb25zdCB0ZXJtID0ga2V5VGVybXNbay50b0xvd2VyQ2FzZSgpXTtcbiAgICBpZiAoIXRlcm0pIHsgcmV0dXJuOyB9XG4gICAgdGVybXMgfD0gdGVybTtcbiAgfVxuICAvLyBzaW1wbGUgY29sdW1uOiBbY29sdW1uXVxuICBlbHNlIGlmICgobSA9IG1hdGNoQ29sdW1uKHN0ciwgcG9zLCBmYWxzZSkpKSB7XG4gICAgcG9zICs9IG1bMF0ubGVuZ3RoO1xuICAgIGlmIChtWzFdKSB7XG4gICAgICBjb2x1bW5zLnB1c2gobVsxXSk7XG4gICAgfVxuICB9XG4gIC8vIHVzZSB0aGUgXCJub3JtYWxcIiBtZXRob2RcbiAgLy8gW1sja2V5d29yZF1dXG4gIC8vIFtbY29sdW1uXV1cbiAgLy8gW0BdXG4gIC8vIFtAY29sdW1uXVxuICAvLyBbQFtjb2x1bW5dXVxuICAvLyBbQGNvbHVtbjpjb2x1bW5dXG4gIC8vIFtAY29sdW1uOltjb2x1bW5dXVxuICAvLyBbQFtjb2x1bW5dOmNvbHVtbl1cbiAgLy8gW0BbY29sdW1uXTpbY29sdW1uXV1cbiAgLy8gW2NvbHVtbjpjb2x1bW5dXG4gIC8vIFtjb2x1bW46W2NvbHVtbl1dXG4gIC8vIFtbY29sdW1uXTpjb2x1bW5dXG4gIC8vIFtbY29sdW1uXTpbY29sdW1uXV1cbiAgLy8gW1sja2V5d29yZF0sY29sdW1uXVxuICAvLyBbWyNrZXl3b3JkXSxjb2x1bW46Y29sdW1uXVxuICAvLyBbWyNrZXl3b3JkXSxbI2tleXdvcmRdLGNvbHVtbjpjb2x1bW5dXG4gIC8vIC4uLlxuICBlbHNlIHtcbiAgICBsZXQgZXhwZWN0X21vcmUgPSB0cnVlO1xuICAgIHBvcysrOyAvLyBza2lwIG9wZW4gYnJhY2VcbiAgICBwb3MgKz0gc2tpcFdoaXRlc3BhY2Uoc3RyLCBwb3MpO1xuICAgIC8vIG1hdGNoIGtleXdvcmRzIGFzIHdlIGZpbmQgdGhlbVxuICAgIHdoaWxlIChleHBlY3RfbW9yZSAmJiAobSA9IG1hdGNoS2V5d29yZChzdHIsIHBvcykpKSB7XG4gICAgICBjb25zdCBrID0gc3RyLnNsaWNlKHBvcyArIDIsIHBvcyArIG0gLSAxKTtcbiAgICAgIGNvbnN0IHRlcm0gPSBrZXlUZXJtc1trLnRvTG93ZXJDYXNlKCldO1xuICAgICAgaWYgKCF0ZXJtKSB7IHJldHVybjsgfVxuICAgICAgdGVybXMgfD0gdGVybTtcbiAgICAgIHBvcyArPSBtO1xuICAgICAgcG9zICs9IHNraXBXaGl0ZXNwYWNlKHN0ciwgcG9zKTtcbiAgICAgIGV4cGVjdF9tb3JlID0gc3RyLmNoYXJDb2RlQXQocG9zKSA9PT0gQ09NTUE7XG4gICAgICBpZiAoZXhwZWN0X21vcmUpIHtcbiAgICAgICAgcG9zKys7XG4gICAgICAgIHBvcyArPSBza2lwV2hpdGVzcGFjZShzdHIsIHBvcyk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGlzIHRoZXJlIGFuIEAgc3BlY2lmaWVyP1xuICAgIGlmIChleHBlY3RfbW9yZSAmJiAoc3RyLmNoYXJDb2RlQXQocG9zKSA9PT0gQVQpKSB7XG4gICAgICB0ZXJtcyB8PSBrZXlUZXJtc1snQCddO1xuICAgICAgcG9zICs9IDE7XG4gICAgICBleHBlY3RfbW9yZSA9IHN0ci5jaGFyQ29kZUF0KHBvcykgIT09IEJSX0NMT1NFO1xuICAgIH1cbiAgICAvLyBub3QgYWxsIGtleXdvcmQgdGVybXMgbWF5IGJlIGNvbWJpbmVkXG4gICAgaWYgKCFzZWN0aW9uTWFwW3Rlcm1zXSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBjb2x1bW4gZGVmaW5pdGlvbnNcbiAgICBjb25zdCBsZWZ0Q29sID0gZXhwZWN0X21vcmUgJiYgbWF0Y2hDb2x1bW4oc3RyLCBwb3MsIHRydWUpO1xuICAgIGlmIChsZWZ0Q29sKSB7XG4gICAgICBwb3MgKz0gbGVmdENvbFswXS5sZW5ndGg7XG4gICAgICBjb2x1bW5zLnB1c2gobGVmdENvbFsxXSk7XG4gICAgICBpZiAoc3RyLmNoYXJDb2RlQXQocG9zKSA9PT0gQ09MT04pIHtcbiAgICAgICAgcG9zKys7XG4gICAgICAgIGNvbnN0IHJpZ2h0Q29sID0gbWF0Y2hDb2x1bW4oc3RyLCBwb3MsIHRydWUpO1xuICAgICAgICBpZiAocmlnaHRDb2wpIHtcbiAgICAgICAgICBwb3MgKz0gcmlnaHRDb2xbMF0ubGVuZ3RoO1xuICAgICAgICAgIGNvbHVtbnMucHVzaChyaWdodENvbFsxXSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBleHBlY3RfbW9yZSA9IGZhbHNlO1xuICAgIH1cbiAgICAvLyBhZHZhbmNlIHdzXG4gICAgcG9zICs9IHNraXBXaGl0ZXNwYWNlKHN0ciwgcG9zKTtcbiAgICAvLyBjbG9zZSB0aGUgcmVmXG4gICAgaWYgKGV4cGVjdF9tb3JlIHx8IHN0ci5jaGFyQ29kZUF0KHBvcykgIT09IEJSX0NMT1NFKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIHN0ZXAgb3ZlciB0aGUgY2xvc2luZyBdXG4gICAgcG9zKys7XG4gIH1cblxuICBjb25zdCBzZWN0aW9ucyA9IHNlY3Rpb25NYXBbdGVybXNdO1xuICByZXR1cm4ge1xuICAgIGNvbHVtbnMsXG4gICAgc2VjdGlvbnM6IHNlY3Rpb25zID8gc2VjdGlvbnMuY29uY2F0KCkgOiBzZWN0aW9ucyxcbiAgICBsZW5ndGg6IHBvcyAtIHN0YXJ0LFxuICAgIHRva2VuOiBzdHIuc2xpY2Uoc3RhcnQsIHBvcylcbiAgfTtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLW1peGVkLW9wZXJhdG9ycyAqL1xuaW1wb3J0IHsgcGFyc2VTUmFuZ2UgfSBmcm9tICcuLi9wYXJzZVNSYW5nZS5qcyc7XG5pbXBvcnQgeyBSRUZfU1RSVUNUIH0gZnJvbSAnLi4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IGlzV1MgfSBmcm9tICcuL2xleFdoaXRlc3BhY2UuanMnO1xuXG5jb25zdCBFWENMID0gMzM7IC8vICFcblxuZXhwb3J0IGZ1bmN0aW9uIGxleFN0cnVjdHVyZWQgKHN0ciwgcG9zKSB7XG4gIGNvbnN0IHN0cnVjdERhdGEgPSBwYXJzZVNSYW5nZShzdHIsIHBvcyk7XG4gIGlmIChzdHJ1Y3REYXRhICYmIHN0cnVjdERhdGEubGVuZ3RoKSB7XG4gICAgLy8gd2UgaGF2ZSBhIG1hdGNoIGZvciBhIHZhbGlkIFNSXG4gICAgbGV0IGkgPSBzdHJ1Y3REYXRhLmxlbmd0aDtcbiAgICAvLyBza2lwIHRhaWxpbmcgd2hpdGVzcGFjZVxuICAgIHdoaWxlIChpc1dTKHN0ci5jaGFyQ29kZUF0KHBvcyArIGkpKSkge1xuICAgICAgaSsrO1xuICAgIH1cbiAgICAvLyBhbmQgZW5zdXJlIHRoYXQgaXQgaXNuJ3QgZm9sbG93ZWQgYnkgYSAhXG4gICAgaWYgKHN0ci5jaGFyQ29kZUF0KHBvcyArIGkpICE9PSBFWENMKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBSRUZfU1RSVUNULFxuICAgICAgICB2YWx1ZTogc3RydWN0RGF0YS50b2tlblxuICAgICAgfTtcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IE5VTUJFUiB9IGZyb20gJy4uL2NvbnN0YW50cy5qcyc7XG5cbmZ1bmN0aW9uIGFkdkRpZ2l0cyAoc3RyLCBwb3MpIHtcbiAgY29uc3Qgc3RhcnQgPSBwb3M7XG4gIGRvIHtcbiAgICBjb25zdCBjID0gc3RyLmNoYXJDb2RlQXQocG9zKTtcbiAgICBpZiAoYyA8IDQ4IHx8IGMgPiA1NykgeyAvLyAwLTlcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBwb3MrKztcbiAgfVxuICB3aGlsZSAocG9zIDwgc3RyLmxlbmd0aCk7XG4gIHJldHVybiBwb3MgLSBzdGFydDtcbn1cblxuLy8gXFxkKyhcXC5cXGQrKT8oPzpbZUVdWystXT9cXGQrKT9cbmV4cG9ydCBmdW5jdGlvbiBsZXhOdW1iZXIgKHN0ciwgcG9zKSB7XG4gIGNvbnN0IHN0YXJ0ID0gcG9zO1xuXG4gIC8vIGludGVnZXJcbiAgY29uc3QgbGVhZCA9IGFkdkRpZ2l0cyhzdHIsIHBvcyk7XG4gIGlmICghbGVhZCkgeyByZXR1cm47IH1cbiAgcG9zICs9IGxlYWQ7XG5cbiAgLy8gb3B0aW9uYWwgZnJhY3Rpb24gcGFydFxuICBjb25zdCBjMCA9IHN0ci5jaGFyQ29kZUF0KHBvcyk7XG4gIGlmIChjMCA9PT0gNDYpIHsgLy8gLlxuICAgIHBvcysrO1xuICAgIGNvbnN0IGZyYWMgPSBhZHZEaWdpdHMoc3RyLCBwb3MpO1xuICAgIGlmICghZnJhYykgeyByZXR1cm47IH1cbiAgICBwb3MgKz0gZnJhYztcbiAgfVxuICAvLyBvcHRpb25hbCBleHBvbmVudCBwYXJ0XG4gIGNvbnN0IGMxID0gc3RyLmNoYXJDb2RlQXQocG9zKTtcbiAgaWYgKGMxID09PSA2OSB8fCBjMSA9PT0gMTAxKSB7IC8vIEUgZVxuICAgIHBvcysrO1xuICAgIGNvbnN0IHNpZ24gPSBzdHIuY2hhckNvZGVBdChwb3MpO1xuICAgIGlmIChzaWduID09PSA0MyB8fCBzaWduID09PSA0NSkgeyAvLyArIC1cbiAgICAgIHBvcysrO1xuICAgIH1cbiAgICBjb25zdCBleHAgPSBhZHZEaWdpdHMoc3RyLCBwb3MpO1xuICAgIGlmICghZXhwKSB7IHJldHVybjsgfVxuICAgIHBvcyArPSBleHA7XG4gIH1cblxuICByZXR1cm4geyB0eXBlOiBOVU1CRVIsIHZhbHVlOiBzdHIuc2xpY2Uoc3RhcnQsIHBvcykgfTtcbn1cbiIsIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCB7IFJFRl9OQU1FRCB9IGZyb20gJy4uL2NvbnN0YW50cy5qcyc7XG5cbi8vIFRoZSBhZHZlcnRpemVkIG5hbWVkIHJhbmdlcyBydWxlcyBhcmUgYSBiaXQgb2ZmIGZyb20gd2hhdCBFeGNlbCBzZWVtcyB0byBkby5cbi8vIEluIHRoZSBcImV4dGVuZGVkIHJhbmdlXCIgb2YgY2hhcnMsIGl0IGxvb2tzIGxpa2UgaXQgYWxsb3dzIG1vc3QgdGhpbmdzIGFib3ZlXG4vLyBVKzAwQjAgd2l0aCB0aGUgcmFuZ2UgYmV0d2VlbiBVKzAwQTAtVSswMEFGIHJhdGhlciByYW5kb206XG4vLyAvXlthLXpBLVpcXFxcX8KhwqTCp8KowqpcXHUwMGFkwq9cXHUwMGIwLVxcdWZmZmZdW2EtekEtWjAtOVxcXFxfLj/CocKkwqfCqMKqXFx1MDBhZMKvXFx1MDBiMC1cXHVmZmZmXXswLDI1NH0vXG4vL1xuLy8gSSd2ZSBzaW1wbGlmaWVkIHRvIGFsbG93aW5nIGV2ZXJ5dGhpbmcgYWJvdmUgVSswMEExOlxuLy8gL15bYS16QS1aXFxcXF9cXHUwMGExLVxcdWZmZmZdW2EtekEtWjAtOVxcXFxfLj9cXHUwMGExLVxcdWZmZmZdezAsMjU0fS9cbmV4cG9ydCBmdW5jdGlvbiBsZXhOYW1lZCAoc3RyLCBwb3MpIHtcbiAgY29uc3Qgc3RhcnQgPSBwb3M7XG4gIC8vIHN0YXJ0cyB3aXRoOiBbYS16QS1aXFxcXF9cXHUwMGExLVxcdWZmZmZdXG4gIGNvbnN0IHMgPSBzdHIuY2hhckNvZGVBdChwb3MpO1xuICBpZiAoXG4gICAgKHMgPj0gNjUgJiYgcyA8PSA5MCkgfHwgLy8gQS1aXG4gICAgKHMgPj0gOTcgJiYgcyA8PSAxMjIpIHx8IC8vIGEtelxuICAgIChzID09PSA5NSkgfHwgLy8gX1xuICAgIChzID09PSA5MikgfHwgLy8gXFxcbiAgICAocyA+IDB4QTApIC8vIFxcdTAwYTEtXFx1ZmZmZlxuICApIHtcbiAgICBwb3MrKztcbiAgfVxuICBlbHNlIHtcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gaGFzIGFueSBudW1iZXIgb2Y6IFthLXpBLVowLTlcXFxcXy4/XFx1MDBhMS1cXHVmZmZmXVxuICBsZXQgYztcbiAgZG8ge1xuICAgIGMgPSBzdHIuY2hhckNvZGVBdChwb3MpO1xuICAgIGlmIChcbiAgICAgIChjID49IDY1ICYmIGMgPD0gOTApIHx8IC8vIEEtWlxuICAgICAgKGMgPj0gOTcgJiYgYyA8PSAxMjIpIHx8IC8vIGEtelxuICAgICAgKGMgPj0gNDggJiYgYyA8PSA1NykgfHwgLy8gMC05XG4gICAgICAoYyA9PT0gOTUpIHx8IC8vIF9cbiAgICAgIChjID09PSA5MikgfHwgLy8gXFxcbiAgICAgIChjID09PSA0NikgfHwgLy8gLlxuICAgICAgKGMgPT09IDYzKSB8fCAvLyA/XG4gICAgICAoYyA+IDB4QTApIC8vIFxcdTAwYTEtXFx1ZmZmZlxuICAgICkge1xuICAgICAgcG9zKys7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9IHdoaWxlIChpc0Zpbml0ZShjKSk7XG5cbiAgY29uc3QgbGVuID0gcG9zIC0gc3RhcnQ7XG4gIGlmIChsZW4gJiYgbGVuIDwgMjU1KSB7XG4gICAgLy8gbmFtZXMgc3RhcnRpbmcgd2l0aCBcXCBtdXN0IGJlIGF0IGxlYXN0IDMgY2hhciBsb25nXG4gICAgaWYgKHMgPT09IDkyICYmIGxlbiA8IDMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gc2luZ2xlIGNoYXJhY3RlcnMgUiBhbmQgQyBhcmUgZm9yYmlkZGVuIGFzIG5hbWVzXG4gICAgaWYgKGxlbiA9PT0gMSAmJiAocyA9PT0gMTE0IHx8IHMgPT09IDgyIHx8IHMgPT09IDk5IHx8IHMgPT09IDY3KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXR1cm4geyB0eXBlOiBSRUZfTkFNRUQsIHZhbHVlOiBzdHIuc2xpY2Uoc3RhcnQsIHBvcykgfTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgbGV4RXJyb3IgfSBmcm9tICcuL2xleEVycm9yLmpzJztcbmltcG9ydCB7IGxleFJhbmdlVHJpbSB9IGZyb20gJy4vbGV4UmFuZ2VUcmltLmpzJztcbmltcG9ydCB7IGxleE9wZXJhdG9yIH0gZnJvbSAnLi9sZXhPcGVyYXRvci5qcyc7XG5pbXBvcnQgeyBsZXhGdW5jdGlvbiB9IGZyb20gJy4vbGV4RnVuY3Rpb24uanMnO1xuaW1wb3J0IHsgbGV4Qm9vbGVhbiB9IGZyb20gJy4vbGV4Qm9vbGVhbi5qcyc7XG5pbXBvcnQgeyBsZXhOZXdMaW5lIH0gZnJvbSAnLi9sZXhOZXdMaW5lLmpzJztcbmltcG9ydCB7IGxleFdoaXRlc3BhY2UgfSBmcm9tICcuL2xleFdoaXRlc3BhY2UuanMnO1xuaW1wb3J0IHsgbGV4U3RyaW5nIH0gZnJvbSAnLi9sZXhTdHJpbmcuanMnO1xuaW1wb3J0IHsgbGV4Q29udGV4dCB9IGZyb20gJy4vbGV4Q29udGV4dC5qcyc7XG5pbXBvcnQgeyBsZXhSYW5nZSB9IGZyb20gJy4vbGV4UmFuZ2UuanMnO1xuaW1wb3J0IHsgbGV4U3RydWN0dXJlZCB9IGZyb20gJy4vbGV4U3RydWN0dXJlZC5qcyc7XG5pbXBvcnQgeyBsZXhOdW1iZXIgfSBmcm9tICcuL2xleE51bWJlci5qcyc7XG5pbXBvcnQgeyBsZXhOYW1lZCB9IGZyb20gJy4vbGV4TmFtZWQuanMnO1xuaW1wb3J0IHsgbGV4UmVmT3AgfSBmcm9tICcuL2xleFJlZk9wLmpzJztcblxuZXhwb3J0IGNvbnN0IGxleGVycyA9IFtcbiAgbGV4RXJyb3IsXG4gIGxleFJhbmdlVHJpbSxcbiAgbGV4T3BlcmF0b3IsXG4gIGxleEZ1bmN0aW9uLFxuICBsZXhCb29sZWFuLFxuICBsZXhOZXdMaW5lLFxuICBsZXhXaGl0ZXNwYWNlLFxuICBsZXhTdHJpbmcsXG4gIGxleENvbnRleHQsXG4gIGxleFJhbmdlLFxuICBsZXhTdHJ1Y3R1cmVkLFxuICBsZXhOdW1iZXIsXG4gIGxleE5hbWVkXG5dO1xuXG5leHBvcnQgY29uc3QgbGV4ZXJzUmVmcyA9IFtcbiAgbGV4UmVmT3AsXG4gIGxleENvbnRleHQsXG4gIGxleFJhbmdlLFxuICBsZXhTdHJ1Y3R1cmVkLFxuICBsZXhOYW1lZFxuXTtcbiIsImltcG9ydCB7IE9QRVJBVE9SX1RSSU0gfSBmcm9tICcuLi9jb25zdGFudHMuanMnO1xuXG5jb25zdCBQRVJJT0QgPSA0NjtcbmNvbnN0IENPTE9OID0gNTg7XG5cbmV4cG9ydCBmdW5jdGlvbiBsZXhSYW5nZVRyaW0gKHN0ciwgcG9zKSB7XG4gIGNvbnN0IGMwID0gc3RyLmNoYXJDb2RlQXQocG9zKTtcbiAgaWYgKGMwID09PSBQRVJJT0QgfHwgYzAgPT09IENPTE9OKSB7XG4gICAgY29uc3QgYzEgPSBzdHIuY2hhckNvZGVBdChwb3MgKyAxKTtcbiAgICBpZiAoYzAgIT09IGMxKSB7XG4gICAgICBpZiAoYzEgPT09IENPTE9OKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogT1BFUkFUT1JfVFJJTSxcbiAgICAgICAgICB2YWx1ZTogc3RyLnNsaWNlKHBvcywgcG9zICsgKHN0ci5jaGFyQ29kZUF0KHBvcyArIDIpID09PSBQRVJJT0QgPyAzIDogMikpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChjMSA9PT0gUEVSSU9EKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgdHlwZTogT1BFUkFUT1JfVFJJTSxcbiAgICAgICAgICB2YWx1ZTogc3RyLnNsaWNlKHBvcywgcG9zICsgMilcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IE9QRVJBVE9SIH0gZnJvbSAnLi4vY29uc3RhbnRzLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGxleE9wZXJhdG9yIChzdHIsIHBvcykge1xuICBjb25zdCBjMCA9IHN0ci5jaGFyQ29kZUF0KHBvcyk7XG4gIGNvbnN0IGMxID0gc3RyLmNoYXJDb2RlQXQocG9zICsgMSk7XG4gIGlmIChcbiAgICAoYzAgPT09IDYwICYmIGMxID09PSA2MSkgfHwgLy8gPD1cbiAgICAoYzAgPT09IDYyICYmIGMxID09PSA2MSkgfHwgLy8gPj1cbiAgICAoYzAgPT09IDYwICYmIGMxID09PSA2MikgICAgLy8gPD5cbiAgKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogT1BFUkFUT1IsIHZhbHVlOiBzdHIuc2xpY2UocG9zLCBwb3MgKyAyKSB9O1xuICB9XG4gIGlmIChcbiAgICAvLyB7IH0gISAjICUgJlxuICAgIGMwID09PSAxMjMgfHwgYzAgPT09IDEyNSB8fCBjMCA9PT0gMzMgfHwgYzAgPT09IDM1IHx8IGMwID09PSAzNyB8fCBjMCA9PT0gMzggfHxcbiAgICAvLyAoICkgKiArICwgLVxuICAgIGMwID09PSA0MCB8fCBjMCA9PT0gNDEgfHwgYzAgPT09IDQyIHx8IGMwID09PSA0MyB8fCBjMCA9PT0gNDQgfHwgYzAgPT09IDQ1IHx8XG4gICAgLy8gLyA6IDsgPCA9ID5cbiAgICBjMCA9PT0gNDcgfHwgYzAgPT09IDU4IHx8IGMwID09PSA1OSB8fCBjMCA9PT0gNjAgfHwgYzAgPT09IDYxIHx8IGMwID09PSA2MiB8fFxuICAgIC8vIEAgXlxuICAgIGMwID09PSA2NCB8fCBjMCA9PT0gOTRcbiAgKSB7XG4gICAgcmV0dXJuIHsgdHlwZTogT1BFUkFUT1IsIHZhbHVlOiBzdHJbcG9zXSB9O1xuICB9XG59XG4iLCJpbXBvcnQgeyBGVU5DVElPTiB9IGZyb20gJy4uL2NvbnN0YW50cy5qcyc7XG5cbmNvbnN0IFBBUkVOX09QRU4gPSA0MDtcblxuLy8gW0EtWmEtel9dK1tBLVphLXpcXGRfLl0qKD89XFwoKVxuZXhwb3J0IGZ1bmN0aW9uIGxleEZ1bmN0aW9uIChzdHIsIHBvcykge1xuICBjb25zdCBzdGFydCA9IHBvcztcbiAgLy8gc3RhcnRzIHdpdGg6IGEtekEtWl9cbiAgbGV0IGMgPSBzdHIuY2hhckNvZGVBdChwb3MpO1xuICBpZiAoXG4gICAgKGMgPCA2NSB8fCBjID4gOTApICYmIC8vIEEtWlxuICAgIChjIDwgOTcgfHwgYyA+IDEyMikgJiYgLy8gYS16XG4gICAgKGMgIT09IDk1KSAvLyBfXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuICBwb3MrKztcbiAgLy8gaGFzIGFueSBudW1iZXIgb2Y6IGEtekEtWjAtOV8uXG4gIGRvIHtcbiAgICBjID0gc3RyLmNoYXJDb2RlQXQocG9zKTtcbiAgICBpZiAoXG4gICAgICAoYyA8IDY1IHx8IGMgPiA5MCkgJiYgLy8gQS1aXG4gICAgICAoYyA8IDk3IHx8IGMgPiAxMjIpICYmIC8vIGEtelxuICAgICAgKGMgPCA0OCB8fCBjID4gNTcpICYmIC8vIDAtOVxuICAgICAgKGMgIT09IDk1KSAmJiAvLyBfXG4gICAgICAoYyAhPT0gNDYpIC8vIC5cbiAgICApIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBwb3MrKztcbiAgfSB3aGlsZSAocG9zIDwgc3RyLmxlbmd0aCk7XG4gIC8vIGZvbGxvd2VkIGJ5IGEgKFxuICBpZiAoc3RyLmNoYXJDb2RlQXQocG9zKSA9PT0gUEFSRU5fT1BFTikge1xuICAgIHJldHVybiB7IHR5cGU6IEZVTkNUSU9OLCB2YWx1ZTogc3RyLnNsaWNlKHN0YXJ0LCBwb3MpIH07XG4gIH1cbn1cbiIsImltcG9ydCB7IEJPT0xFQU4gfSBmcm9tICcuLi9jb25zdGFudHMuanMnO1xuXG5leHBvcnQgZnVuY3Rpb24gbGV4Qm9vbGVhbiAoc3RyLCBwb3MpIHtcbiAgLy8gXCJ0cnVlXCIgKGNhc2UgaW5zZW5zaXRpdmUpXG4gIGNvbnN0IGMwID0gc3RyLmNoYXJDb2RlQXQocG9zKTtcbiAgaWYgKGMwID09PSA4NCB8fCBjMCA9PT0gMTE2KSB7XG4gICAgY29uc3QgYzEgPSBzdHIuY2hhckNvZGVBdChwb3MgKyAxKTtcbiAgICBpZiAoYzEgPT09IDgyIHx8IGMxID09PSAxMTQpIHtcbiAgICAgIGNvbnN0IGMyID0gc3RyLmNoYXJDb2RlQXQocG9zICsgMik7XG4gICAgICBpZiAoYzIgPT09IDg1IHx8IGMyID09PSAxMTcpIHtcbiAgICAgICAgY29uc3QgYzMgPSBzdHIuY2hhckNvZGVBdChwb3MgKyAzKTtcbiAgICAgICAgaWYgKGMzID09PSA2OSB8fCBjMyA9PT0gMTAxKSB7XG4gICAgICAgICAgLy8gbm9uIGNoYXIgdG8gZm9sbG93P1xuICAgICAgICAgIHJldHVybiB7IHR5cGU6IEJPT0xFQU4sIHZhbHVlOiBzdHIuc2xpY2UocG9zLCBwb3MgKyA0KSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8vIFwiZmFsc2VcIiAoY2FzZSBpbnNlbnNpdGl2ZSlcbiAgaWYgKGMwID09PSA3MCB8fCBjMCA9PT0gMTAyKSB7XG4gICAgY29uc3QgYzEgPSBzdHIuY2hhckNvZGVBdChwb3MgKyAxKTtcbiAgICBpZiAoYzEgPT09IDY1IHx8IGMxID09PSA5Nykge1xuICAgICAgY29uc3QgYzIgPSBzdHIuY2hhckNvZGVBdChwb3MgKyAyKTtcbiAgICAgIGlmIChjMiA9PT0gNzYgfHwgYzIgPT09IDEwOCkge1xuICAgICAgICBjb25zdCBjMyA9IHN0ci5jaGFyQ29kZUF0KHBvcyArIDMpO1xuICAgICAgICBpZiAoYzMgPT09IDgzIHx8IGMzID09PSAxMTUpIHtcbiAgICAgICAgICBjb25zdCBjNCA9IHN0ci5jaGFyQ29kZUF0KHBvcyArIDQpO1xuICAgICAgICAgIGlmIChjNCA9PT0gNjkgfHwgYzQgPT09IDEwMSkge1xuICAgICAgICAgICAgLy8gbm9uIGNoYXIgdG8gZm9sbG93P1xuICAgICAgICAgICAgcmV0dXJuIHsgdHlwZTogQk9PTEVBTiwgdmFsdWU6IHN0ci5zbGljZShwb3MsIHBvcyArIDUpIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBORVdMSU5FIH0gZnJvbSAnLi4vY29uc3RhbnRzLmpzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGxleE5ld0xpbmUgKHN0ciwgcG9zKSB7XG4gIGNvbnN0IHN0YXJ0ID0gcG9zO1xuICB3aGlsZSAoc3RyLmNoYXJDb2RlQXQocG9zKSA9PT0gMTApIHtcbiAgICBwb3MrKztcbiAgfVxuICBpZiAocG9zICE9PSBzdGFydCkge1xuICAgIHJldHVybiB7IHR5cGU6IE5FV0xJTkUsIHZhbHVlOiBzdHIuc2xpY2Uoc3RhcnQsIHBvcykgfTtcbiAgfVxufVxuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tbWl4ZWQtb3BlcmF0b3JzICovXG5pbXBvcnQgeyBTVFJJTkcgfSBmcm9tICcuLi9jb25zdGFudHMuanMnO1xuXG5jb25zdCBRVU9UID0gMzQ7XG5cbmV4cG9ydCBmdW5jdGlvbiBsZXhTdHJpbmcgKHN0ciwgcG9zKSB7XG4gIGNvbnN0IHN0YXJ0ID0gcG9zO1xuICBpZiAoc3RyLmNoYXJDb2RlQXQocG9zKSA9PT0gUVVPVCkge1xuICAgIHBvcysrO1xuICAgIHdoaWxlIChwb3MgPCBzdHIubGVuZ3RoKSB7XG4gICAgICBjb25zdCBjID0gc3RyLmNoYXJDb2RlQXQocG9zKTtcbiAgICAgIGlmIChjID09PSBRVU9UKSB7XG4gICAgICAgIHBvcysrO1xuICAgICAgICBpZiAoc3RyLmNoYXJDb2RlQXQocG9zKSAhPT0gUVVPVCkge1xuICAgICAgICAgIHJldHVybiB7IHR5cGU6IFNUUklORywgdmFsdWU6IHN0ci5zbGljZShzdGFydCwgcG9zKSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBwb3MrKztcbiAgICB9XG4gICAgcmV0dXJuIHsgdHlwZTogU1RSSU5HLCB2YWx1ZTogc3RyLnNsaWNlKHN0YXJ0LCBwb3MpLCB1bnRlcm1pbmF0ZWQ6IHRydWUgfTtcbiAgfVxufVxuIiwiaW1wb3J0IHsgT1BFUkFUT1IgfSBmcm9tICcuLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgYWR2UmFuZ2VPcCB9IGZyb20gJy4vYWR2UmFuZ2VPcC5qcyc7XG5cbmNvbnN0IEVYQ0wgPSAzMzsgLy8gIVxuXG5leHBvcnQgZnVuY3Rpb24gbGV4UmVmT3AgKHN0ciwgcG9zLCBvcHRzKSB7XG4gIC8vIGluIFIxQzEgbW9kZSB3ZSBvbmx5IGFsbG93IFsgJyEnIF1cbiAgaWYgKHN0ci5jaGFyQ29kZUF0KHBvcykgPT09IEVYQ0wpIHtcbiAgICByZXR1cm4geyB0eXBlOiBPUEVSQVRPUiwgdmFsdWU6IHN0cltwb3NdIH07XG4gIH1cbiAgaWYgKCFvcHRzLnIxYzEpIHtcbiAgICAvLyBpbiBBMSBtb2RlIHdlIGFsbG93IFsgJyEnIF0gKyBbICc6JywgJy46JywgJzouJywgJy46LiddXG4gICAgY29uc3Qgb3BMZW4gPSBhZHZSYW5nZU9wKHN0ciwgcG9zKTtcbiAgICBpZiAob3BMZW4pIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IE9QRVJBVE9SLCB2YWx1ZTogc3RyLnNsaWNlKHBvcywgcG9zICsgb3BMZW4pIH07XG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQge1xuICBGWF9QUkVGSVgsXG4gIE5FV0xJTkUsXG4gIE5VTUJFUixcbiAgT1BFUkFUT1IsXG4gIFJFRl9OQU1FRCxcbiAgVU5LTk9XTixcbiAgV0hJVEVTUEFDRSxcbiAgRlVOQ1RJT04sXG4gIE9QRVJBVE9SX1RSSU0sXG4gIFJFRl9SQU5HRVxufSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBtZXJnZVJlZlRva2VucyB9IGZyb20gJy4vbWVyZ2VSZWZUb2tlbnMuanMnO1xuaW1wb3J0IHsgbGV4ZXJzIH0gZnJvbSAnLi9sZXhlcnMvc2V0cy5qcyc7XG5cbmNvbnN0IGlzVHlwZSA9ICh0LCB0eXBlKSA9PiB0ICYmIHQudHlwZSA9PT0gdHlwZTtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIHdpdGhMb2NhdGlvbjogZmFsc2UsXG4gIG1lcmdlUmVmczogdHJ1ZSxcbiAgYWxsb3dUZXJuYXJ5OiBmYWxzZSxcbiAgbmVnYXRpdmVOdW1iZXJzOiB0cnVlLFxuICByMWMxOiBmYWxzZVxufTtcblxuY29uc3QgaXNUZXh0VG9rZW4gPSB0b2tlbiA9PiB7XG4gIHJldHVybiAoXG4gICAgdG9rZW4udHlwZSA9PT0gUkVGX05BTUVEIHx8XG4gICAgdG9rZW4udHlwZSA9PT0gRlVOQ1RJT05cbiAgKTtcbn07XG5cbmNvbnN0IGNhdXNlc0JpbmFyeU1pbnVzID0gdG9rZW4gPT4ge1xuICByZXR1cm4gIWlzVHlwZSh0b2tlbiwgT1BFUkFUT1IpIHx8IChcbiAgICB0b2tlbi52YWx1ZSA9PT0gJyUnIHx8XG4gICAgdG9rZW4udmFsdWUgPT09ICd9JyB8fFxuICAgIHRva2VuLnZhbHVlID09PSAnKScgfHxcbiAgICB0b2tlbi52YWx1ZSA9PT0gJyMnXG4gICk7XG59O1xuXG5mdW5jdGlvbiBmaXhSQ05hbWVzICh0b2tlbnMpIHtcbiAgbGV0IHdpdGhpbkNhbGwgPSAwO1xuICBsZXQgcGFyZW5EZXB0aCA9IDA7XG4gIGxldCBsYXN0VG9rZW47XG4gIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7XG4gICAgaWYgKHRva2VuLnR5cGUgPT09IE9QRVJBVE9SKSB7XG4gICAgICBpZiAodG9rZW4udmFsdWUgPT09ICcoJykge1xuICAgICAgICBwYXJlbkRlcHRoKys7XG4gICAgICAgIGlmIChsYXN0VG9rZW4udHlwZSA9PT0gRlVOQ1RJT04pIHtcbiAgICAgICAgICBjb25zdCB2ID0gbGFzdFRva2VuLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKHYgPT09ICdsYW1iZGEnIHx8IHYgPT09ICdsZXQnKSB7XG4gICAgICAgICAgICB3aXRoaW5DYWxsID0gcGFyZW5EZXB0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHRva2VuLnZhbHVlID09PSAnKScpIHtcbiAgICAgICAgcGFyZW5EZXB0aC0tO1xuICAgICAgICBpZiAocGFyZW5EZXB0aCA8IHdpdGhpbkNhbGwpIHtcbiAgICAgICAgICB3aXRoaW5DYWxsID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh3aXRoaW5DYWxsICYmIHRva2VuLnR5cGUgPT09IFVOS05PV04gJiYgL15bcmNdJC8udGVzdCh0b2tlbi52YWx1ZSkpIHtcbiAgICAgIHRva2VuLnR5cGUgPSBSRUZfTkFNRUQ7XG4gICAgfVxuICAgIGxhc3RUb2tlbiA9IHRva2VuO1xuICB9XG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb2tlbnMgKGZ4LCB0b2tlbkhhbmRsZXJzLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qgb3B0cyA9IHsgLi4uZGVmYXVsdE9wdGlvbnMsIC4uLm9wdGlvbnMgfTtcbiAgLy8gY29uc3Qgb3B0cyA9IHtcbiAgLy8gICB3aXRoTG9jYXRpb246IG9wdGlvbnMud2l0aExvY2F0aW9uID8/IGZhbHNlLFxuICAvLyAgIG1lcmdlUmVmczogb3B0aW9ucy5tZXJnZVJlZnMgPz8gdHJ1ZSxcbiAgLy8gICBhbGxvd1Rlcm5hcnk6IG9wdGlvbnMuYWxsb3dUZXJuYXJ5ID8/IGZhbHNlLFxuICAvLyAgIG5lZ2F0aXZlTnVtYmVyczogb3B0aW9ucy5uZWdhdGl2ZU51bWJlcnMgPz8gdHJ1ZSxcbiAgLy8gICByMWMxOiBvcHRpb25zLnIxYzEgPz8gZmFsc2VcbiAgLy8gfTtcbiAgY29uc3QgeyB3aXRoTG9jYXRpb24sIG1lcmdlUmVmcywgbmVnYXRpdmVOdW1iZXJzIH0gPSBvcHRzO1xuICBjb25zdCB0b2tlbnMgPSBbXTtcbiAgbGV0IHBvcyA9IDA7XG4gIGxldCBsZXRPckxhbWJkYSA9IDA7XG4gIGxldCB1bmtub3duUkMgPSAwO1xuICBjb25zdCB0cmltT3BzID0gW107XG5cbiAgbGV0IHRhaWwwID0gbnVsbDsgLy8gbGFzdCBub24td2hpdGVzcGFjZSB0b2tlblxuICBsZXQgdGFpbDEgPSBudWxsOyAvLyBwZW51bHRpbWF0ZSBub24td2hpdGVzcGFjZSB0b2tlblxuICBsZXQgbGFzdFRva2VuID0gbnVsbDsgLy8gbGFzdCB0b2tlblxuICBjb25zdCBwdXNoVG9rZW4gPSB0b2tlbiA9PiB7XG4gICAgY29uc3QgaXNDdXJyVW5rbm93biA9IHRva2VuLnR5cGUgPT09IFVOS05PV047XG4gICAgY29uc3QgaXNMYXN0VW5rbm93biA9IGxhc3RUb2tlbiAmJiBsYXN0VG9rZW4udHlwZSA9PT0gVU5LTk9XTjtcbiAgICBpZiAobGFzdFRva2VuICYmIChcbiAgICAgIChpc0N1cnJVbmtub3duICYmIGlzTGFzdFVua25vd24pIHx8XG4gICAgICAoaXNDdXJyVW5rbm93biAmJiBpc1RleHRUb2tlbihsYXN0VG9rZW4pKSB8fFxuICAgICAgKGlzTGFzdFVua25vd24gJiYgaXNUZXh0VG9rZW4odG9rZW4pKVxuICAgICkpIHtcbiAgICAgIC8vIFVOS05PV04gdG9rZW5zIFwiY29udGFtaW5hdGVcIiBzaWJsaW5nIHRleHQgdG9rZW5zXG4gICAgICBsYXN0VG9rZW4udmFsdWUgKz0gdG9rZW4udmFsdWU7XG4gICAgICBsYXN0VG9rZW4udHlwZSA9IFVOS05PV047XG4gICAgICBpZiAod2l0aExvY2F0aW9uKSB7XG4gICAgICAgIGxhc3RUb2tlbi5sb2NbMV0gPSB0b2tlbi5sb2NbMV07XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKHRva2VuLnR5cGUgPT09IE9QRVJBVE9SX1RSSU0pIHtcbiAgICAgICAgdHJpbU9wcy5wdXNoKHRva2Vucy5sZW5ndGgpO1xuICAgICAgICB0b2tlbi50eXBlID0gVU5LTk9XTjtcbiAgICAgIH1cbiAgICAgIC8vIHB1c2ggdG9rZW4gYXMgbm9ybWFsbHlcbiAgICAgIC8vIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgIHRva2Vuc1t0b2tlbnMubGVuZ3RoXSA9IHRva2VuO1xuICAgICAgbGFzdFRva2VuID0gdG9rZW47XG4gICAgICBpZiAodG9rZW4udHlwZSAhPT0gV0hJVEVTUEFDRSAmJiB0b2tlbi50eXBlICE9PSBORVdMSU5FKSB7XG4gICAgICAgIHRhaWwxID0gdGFpbDA7XG4gICAgICAgIHRhaWwwID0gdG9rZW47XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGlmIChmeC5zdGFydHNXaXRoKCc9JykpIHtcbiAgICBjb25zdCB0b2tlbiA9IHsgdHlwZTogRlhfUFJFRklYLCB2YWx1ZTogJz0nIH07XG4gICAgaWYgKHdpdGhMb2NhdGlvbikge1xuICAgICAgdG9rZW4ubG9jID0gWyAwLCAxIF07XG4gICAgfVxuICAgIHBvcysrO1xuICAgIHB1c2hUb2tlbih0b2tlbik7XG4gIH1cblxuICBjb25zdCBudW1IYW5kbGVycyA9IHRva2VuSGFuZGxlcnMubGVuZ3RoO1xuICB3aGlsZSAocG9zIDwgZngubGVuZ3RoKSB7XG4gICAgY29uc3Qgc3RhcnRQb3MgPSBwb3M7XG4gICAgbGV0IHRva2VuO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtSGFuZGxlcnM7IGkrKykge1xuICAgICAgdG9rZW4gPSB0b2tlbkhhbmRsZXJzW2ldKGZ4LCBwb3MsIG9wdHMpO1xuICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgIHBvcyArPSB0b2tlbi52YWx1ZS5sZW5ndGg7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdG9rZW4pIHtcbiAgICAgIHRva2VuID0ge1xuICAgICAgICB0eXBlOiBVTktOT1dOLFxuICAgICAgICB2YWx1ZTogZnhbcG9zXVxuICAgICAgfTtcbiAgICAgIHBvcysrO1xuICAgIH1cbiAgICBpZiAod2l0aExvY2F0aW9uKSB7XG4gICAgICB0b2tlbi5sb2MgPSBbIHN0YXJ0UG9zLCBwb3MgXTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIGEgbm90ZSBpZiB3ZSBmb3VuZCBhIGxldC9sYW1iZGEgY2FsbFxuICAgIGlmIChsYXN0VG9rZW4gJiYgdG9rZW4udmFsdWUgPT09ICcoJyAmJiBsYXN0VG9rZW4udHlwZSA9PT0gRlVOQ1RJT04pIHtcbiAgICAgIGlmICgvXmwoPzphbWJkYXxldCkkL2kudGVzdChsYXN0VG9rZW4udmFsdWUpKSB7XG4gICAgICAgIGxldE9yTGFtYmRhKys7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG1ha2UgYSBub3RlIGlmIHdlIGZvdW5kIGEgUiBvciBDIHVua25vd25cbiAgICBpZiAodG9rZW4udHlwZSA9PT0gVU5LTk9XTiAmJiB0b2tlbi52YWx1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgIGNvbnN0IHZhbExDID0gdG9rZW4udmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHVua25vd25SQyArPSAodmFsTEMgPT09ICdyJyB8fCB2YWxMQyA9PT0gJ2MnKSA/IDEgOiAwO1xuICAgIH1cblxuICAgIGlmIChuZWdhdGl2ZU51bWJlcnMgJiYgdG9rZW4udHlwZSA9PT0gTlVNQkVSKSB7XG4gICAgICBjb25zdCBsYXN0MSA9IGxhc3RUb2tlbjtcbiAgICAgIC8vIGRvIHdlIGhhdmUgYSBudW1iZXIgcHJlY2VkZWQgYnkgYSBtaW51cz9cbiAgICAgIGlmIChsYXN0MSAmJiBpc1R5cGUobGFzdDEsIE9QRVJBVE9SKSAmJiBsYXN0MS52YWx1ZSA9PT0gJy0nKSB7XG4gICAgICAgIC8vIG1pc3NpbmcgdGFpbDEgbWVhbnMgd2UgYXJlIGF0IHRoZSBzdGFydCBvZiB0aGUgc3RyZWFtXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhdGFpbDEgfHxcbiAgICAgICAgICBpc1R5cGUodGFpbDEsIEZYX1BSRUZJWCkgfHxcbiAgICAgICAgICAhY2F1c2VzQmluYXJ5TWludXModGFpbDEpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnN0IG1pbnVzID0gdG9rZW5zLnBvcCgpO1xuICAgICAgICAgIHRva2VuLnZhbHVlID0gJy0nICsgdG9rZW4udmFsdWU7XG4gICAgICAgICAgaWYgKHRva2VuLmxvYykge1xuICAgICAgICAgICAgLy8gZW5zdXJlIG9mZnNldHMgYXJlIHVwIHRvIGRhdGVcbiAgICAgICAgICAgIHRva2VuLmxvY1swXSA9IG1pbnVzLmxvY1swXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gbmV4dCBzdGVwIHRyaWVzIHRvIGNvdW50ZXIgdGhlIHNjcmV3aW5nIGFyb3VuZCB3aXRoIHRoZSB0YWlsaW5nXG4gICAgICAgICAgLy8gaXQgc2hvdWxkIGJlIGNvcnJlY3QgYWdhaW4gb25jZSB3ZSBwdXNoVG9rZW4oKVxuICAgICAgICAgIHRhaWwwID0gdGFpbDE7XG4gICAgICAgICAgbGFzdFRva2VuID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHB1c2hUb2tlbih0b2tlbik7XG4gIH1cblxuICAvLyBpZiB3ZSBlbmNvdW50ZXJlZCBib3RoIGEgTEFNQkRBL0xFVCBjYWxsLCBhbmQgdW5rbm93biAncicgb3IgJ2MnIHRva2Vuc1xuICAvLyB3ZSdsbCB0dXJuIHRoZSB1bmtub3duIHRva2VucyBpbnRvIG5hbWVzIHdpdGhpbiB0aGUgY2FsbC5cbiAgaWYgKHVua25vd25SQyAmJiBsZXRPckxhbWJkYSkge1xuICAgIGZpeFJDTmFtZXModG9rZW5zKTtcbiAgfVxuXG4gIC8vIEFueSBPUEVSQVRPUl9UUklNIHRva2VucyBoYXZlIGJlZW4gaW5kZXhlZCBhbHJlYWR5LCB0aGV5IG5vdyBuZWVkIHRvIGJlXG4gIC8vIGVpdGhlciB0dXJuZWQgaW50byBPUEVSQVRPUnMgb3IgVU5LTk9XTnMuIFRyaW0gb3BlcmF0b3JzIGFyZSBvbmx5IGFsbG93ZWRcbiAgLy8gYmV0d2VlbiB0d28gUkVGX1JBTkdFIHRva2VucyBhcyB0aGV5IGFyZSBub3QgdmFsaWQgaW4gZXhwcmVzc2lvbnMgYXMgZnVsbFxuICAvLyBvcGVyYXRvcnMuXG4gIGZvciAoY29uc3QgaW5kZXggb2YgdHJpbU9wcykge1xuICAgIGNvbnN0IGJlZm9yZSA9IHRva2Vuc1tpbmRleCAtIDFdO1xuICAgIGNvbnN0IGFmdGVyID0gdG9rZW5zW2luZGV4ICsgMV07XG4gICAgaWYgKGJlZm9yZSAmJiBiZWZvcmUudHlwZSA9PT0gUkVGX1JBTkdFICYmIGFmdGVyICYmIGFmdGVyLnR5cGUgPT09IFJFRl9SQU5HRSkge1xuICAgICAgdG9rZW5zW2luZGV4XS50eXBlID0gT1BFUkFUT1I7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdG9rZW5zW2luZGV4XS50eXBlID0gVU5LTk9XTjtcbiAgICB9XG4gIH1cblxuICBpZiAobWVyZ2VSZWZzKSB7XG4gICAgcmV0dXJuIG1lcmdlUmVmVG9rZW5zKHRva2Vucyk7XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG4vKipcbiAqIEJyZWFrcyBhIHN0cmluZyBmb3JtdWxhIGludG8gYSBsaXN0IG9mIHRva2Vucy5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgb3V0cHV0IHdpbGwgYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHRva2VuczpcbiAqXG4gKiBgYGBqc1xuICogW1xuICogICB7IHR5cGU6IEZYX1BSRUZJWCwgdmFsdWU6ICc9JyB9LFxuICogICB7IHR5cGU6IEZVTkNUSU9OLCB2YWx1ZTogJ1NVTScgfSxcbiAqICAgeyB0eXBlOiBPUEVSQVRPUiwgdmFsdWU6ICcoJyB9LFxuICogICB7IHR5cGU6IFJFRl9SQU5HRSwgdmFsdWU6ICdBMTpCMicgfSxcbiAqICAgeyB0eXBlOiBPUEVSQVRPUiwgdmFsdWU6ICcpJyB9XG4gKiBdXG4gKiBgYGBcbiAqXG4gKiBUb2tlbiB0eXBlcyBtYXkgYmUgZm91bmQgYXMgYW4gT2JqZWN0IGFzIHRoZVxuICogW2B0b2tlblR5cGVzYCBleHBvcnRde0BsaW5rIHRva2VuVHlwZXN9IG9uIHRoZSBwYWNrYWdlXG4gKiAoYGltcG9ydCB7dG9rZW5UeXBlc30gZnJvbSAnQGJvcmdhci9meCc7YCkuXG4gKlxuICogVG8gc3VwcG9ydCBzeW50YXggaGlnaGxpZ2h0aW5nIGFzIHlvdSB0eXBlLCBgU1RSSU5HYCB0b2tlbnMgYXJlIGFsbG93ZWQgdG8gYmVcbiAqIFwidW50ZXJtaW5hdGVkXCIuIEZvciBleGFtcGxlLCB0aGUgaW5jb21wbGV0ZSBmb3JtdWxhIGA9XCJIZWxsbyB3b3JsZGAgd291bGQgYmVcbiAqIHRva2VuaXplZCBhczpcbiAqXG4gKiBgYGBqc1xuICogW1xuICogICB7IHR5cGU6IEZYX1BSRUZJWCwgdmFsdWU6ICc9JyB9LFxuICogICB7IHR5cGU6IFNUUklORywgdmFsdWU6ICdcIkhlbGxvIHdvcmxkJywgdW50ZXJtaW5hdGVkOiB0cnVlIH0sXG4gKiBdXG4gKiBgYGBcbiAqXG4gKiBAc2VlIHRva2VuVHlwZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtdWxhIEFuIEV4Y2VsIGZvcm11bGEgc3RyaW5nIChhbiBFeGNlbCBleHByZXNzaW9uKSBvciBhbiBhcnJheSBvZiB0b2tlbnMuXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dICBPcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93VGVybmFyeT1mYWxzZV0gIEVuYWJsZXMgdGhlIHJlY29nbml0aW9uIG9mIHRlcm5hcnkgcmFuZ2VzIGluIHRoZSBzdHlsZSBvZiBgQTE6QWAgb3IgYEExOjFgLiBUaGVzZSBhcmUgc3VwcG9ydGVkIGJ5IEdvb2dsZSBTaGVldHMgYnV0IG5vdCBFeGNlbC4gU2VlOiBSZWZlcmVuY2VzLm1kLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5uZWdhdGl2ZU51bWJlcnM9dHJ1ZV0gIE1lcmdlcyB1bmFyeSBtaW51c2VzIHdpdGggdGhlaXIgaW1tZWRpYXRlbHkgZm9sbG93aW5nIG51bWJlciB0b2tlbnMgKGAtYCxgMWApID0+IGAtMWAgKGFsdGVybmF0aXZlbHkgdGhlc2Ugd2lsbCBiZSB1bmFyeSBvcGVyYXRpb25zIGluIHRoZSB0cmVlKS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucjFjMT1mYWxzZV0gIFJhbmdlcyBhcmUgZXhwZWN0ZWQgdG8gYmUgaW4gdGhlIFIxQzEgc3R5bGUgZm9ybWF0IHJhdGhlciB0aGFuIHRoZSBtb3JlIHBvcHVsYXIgQTEgc3R5bGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLndpdGhMb2NhdGlvbj10cnVlXSAgTm9kZXMgd2lsbCBpbmNsdWRlIHNvdXJjZSBwb3NpdGlvbiBvZmZzZXRzIHRvIHRoZSB0b2tlbnM6IGB7IGxvYzogWyBzdGFydCwgZW5kIF0gfWBcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubWVyZ2VSZWZzPXRydWVdICBTaG91bGQgcmFuZ2VzIGJlIHJldHVybmVkIGFzIHdob2xlIHJlZmVyZW5jZXMgKGBTaGVldDEhQTE6QjJgKSBvciBhcyBzZXBhcmF0ZSB0b2tlbnMgZm9yIGVhY2ggcGFydDogKGBTaGVldDFgLGAhYCxgQTFgLGA6YCxgQjJgKS4gVGhpcyBpcyB0aGUgc2FtZSBhcyBjYWxsaW5nIFtgbWVyZ2VSZWZUb2tlbnNgXSgjbWVyZ2VSZWZUb2tlbnMpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnhsc3g9ZmFsc2VdICBFbmFibGVzIGEgYFsxXVNoZWV0MSFBMWAgb3IgYFsxXSFuYW1lYCBzeW50YXggZm9ybSBmb3IgZXh0ZXJuYWwgd29ya2Jvb2tzIGZvdW5kIG9ubHkgaW4gWExTWCBmaWxlcy5cbiAqIEByZXR1cm5zIHtBcnJheTxUb2tlbj59IEFuIEFTVCBvZiBub2Rlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemUgKGZvcm11bGEsIG9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gZ2V0VG9rZW5zKGZvcm11bGEsIGxleGVycywgb3B0aW9ucyk7XG59XG4iLCJpbXBvcnQge1xuICBSRUZfUkFOR0UsIFJFRl9CRUFNLCBSRUZfTkFNRUQsIFJFRl9URVJOQVJZLCBSRUZfU1RSVUNULFxuICBGWF9QUkVGSVgsIFdISVRFU1BBQ0UsIE5FV0xJTkUsXG4gIEZVTkNUSU9OLCBPUEVSQVRPUixcbiAgRVJST1IsIFNUUklORywgTlVNQkVSLCBCT09MRUFOXG59IGZyb20gJy4vY29uc3RhbnRzLmpzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBhIHJhbmdlLlxuICpcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBpbnB1dCBpcyBhIHRva2VuIHRoYXQgaGFzIGEgdHlwZSBvZiBlaXRoZXIgUkVGX1JBTkdFXG4gKiAoYEExYCBvciBgQTE6QjJgKSwgUkVGX1RFUk5BUlkgKGBBMTpBYCwgYEExOjFgLCBgMTpBMWAsIG9yIGBBOkExYCksIG9yXG4gKiBSRUZfQkVBTSAoYEE6QWAgb3IgYDE6MWApLiBJbiBhbGwgb3RoZXIgY2FzZXMgYGZhbHNlYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdG9rZW4gQSB0b2tlblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyByYW5nZSwgRmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSYW5nZSAodG9rZW4pIHtcbiAgcmV0dXJuICEhdG9rZW4gJiYgKFxuICAgIHRva2VuLnR5cGUgPT09IFJFRl9SQU5HRSB8fFxuICAgIHRva2VuLnR5cGUgPT09IFJFRl9CRUFNIHx8XG4gICAgdG9rZW4udHlwZSA9PT0gUkVGX1RFUk5BUllcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBhIHJlZmVyZW5jZS5cbiAqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgaXMgYSB0b2tlbiBvZiB0eXBlIFJFRl9SQU5HRSAoYEExYCBvciBgQTE6QjJgKSxcbiAqIFJFRl9URVJOQVJZIChgQTE6QWAsIGBBMToxYCwgYDE6QTFgLCBvciBgQTpBMWApLCBSRUZfQkVBTSAoYEE6QWAgb3IgYDE6MWApLFxuICogb3IgUkVGX05BTUVEIChgbXlyYW5nZWApLiBJbiBhbGwgb3RoZXIgY2FzZXMgYGZhbHNlYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdG9rZW4gVGhlIHRva2VuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIHJlZmVyZW5jZSwgRmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2UgKHRva2VuKSB7XG4gIHJldHVybiAhIXRva2VuICYmIChcbiAgICB0b2tlbi50eXBlID09PSBSRUZfUkFOR0UgfHxcbiAgICB0b2tlbi50eXBlID09PSBSRUZfQkVBTSB8fFxuICAgIHRva2VuLnR5cGUgPT09IFJFRl9URVJOQVJZIHx8XG4gICAgdG9rZW4udHlwZSA9PT0gUkVGX1NUUlVDVCB8fFxuICAgIHRva2VuLnR5cGUgPT09IFJFRl9OQU1FRFxuICApO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIGEgbGl0ZXJhbC5cbiAqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgaXMgYSB0b2tlbiBvZiB0eXBlIEJPT0xFQU4gKGBUUlVFYCBvciBgRkFMU0VgKSxcbiAqIEVSUk9SIChgI1ZBTFVFIWApLCBOVU1CRVIgKDEyMy40KSwgb3IgU1RSSU5HIChgXCJsb3JlbSBpcHN1bVwiYCkuIEluIGFsbCBvdGhlclxuICogY2FzZXMgYGZhbHNlYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdG9rZW4gVGhlIHRva2VuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIGxpdGVyYWwsIEZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGl0ZXJhbCAodG9rZW4pIHtcbiAgcmV0dXJuICEhdG9rZW4gJiYgKFxuICAgIHRva2VuLnR5cGUgPT09IEJPT0xFQU4gfHxcbiAgICB0b2tlbi50eXBlID09PSBFUlJPUiB8fFxuICAgIHRva2VuLnR5cGUgPT09IE5VTUJFUiB8fFxuICAgIHRva2VuLnR5cGUgPT09IFNUUklOR1xuICApO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIGFuIGVycm9yLlxuICpcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBpbnB1dCBpcyBhIHRva2VuIG9mIHR5cGUgRVJST1IgKGAjVkFMVUUhYCkuIEluIGFsbFxuICogb3RoZXIgY2FzZXMgYGZhbHNlYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdG9rZW4gVGhlIHRva2VuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIGVycm9yLCBGYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Vycm9yICh0b2tlbikge1xuICByZXR1cm4gISF0b2tlbiAmJiB0b2tlbi50eXBlID09PSBFUlJPUjtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyB3aGl0ZXNwYWNlLlxuICpcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBpbnB1dCBpcyBhIHRva2VuIG9mIHR5cGUgV0hJVEVTUEFDRSAoYCBgKSBvclxuICogTkVXTElORSAoYFxcbmApLiBJbiBhbGwgb3RoZXIgY2FzZXMgYGZhbHNlYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdG9rZW4gVGhlIHRva2VuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIHdoaXRlc3BhY2UsIEZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzV2hpdGVzcGFjZSAodG9rZW4pIHtcbiAgcmV0dXJuICEhdG9rZW4gJiYgKFxuICAgIHRva2VuLnR5cGUgPT09IFdISVRFU1BBQ0UgfHxcbiAgICB0b2tlbi50eXBlID09PSBORVdMSU5FXG4gICk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgdG9rZW4gaXMgYSBmdW5jdGlvbi5cbiAqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgaXMgYSB0b2tlbiBvZiB0eXBlIEZVTkNUSU9OLlxuICogSW4gYWxsIG90aGVyIGNhc2VzIGBmYWxzZWAgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHthbnl9IHRva2VuIFRoZSB0b2tlblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBmdW5jdGlvbiwgRmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbiAodG9rZW4pIHtcbiAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gRlVOQ1RJT047XG59XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGlucHV0IGlzIGEgdG9rZW4gb2YgdHlwZSBGWF9QUkVGSVggKGxlYWRpbmcgYD1gIGluXG4gKiBmb3JtdWxhKS4gSW4gYWxsIG90aGVyIGNhc2VzIGBmYWxzZWAgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHthbnl9IHRva2VuIFRoZSB0b2tlblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBlZmZlY3RzIHByZWZpeCwgRmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGeFByZWZpeCAodG9rZW4pIHtcbiAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gRlhfUFJFRklYO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIGFuIG9wZXJhdG9yLlxuICpcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBpbnB1dCBpcyBhIHRva2VuIG9mIHR5cGUgT1BFUkFUT1IgKGArYCBvciBgOmApLiBJbiBhbGxcbiAqIG90aGVyIGNhc2VzIGBmYWxzZWAgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHthbnl9IHRva2VuIFRoZSB0b2tlblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBvcGVyYXRvciwgRmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNPcGVyYXRvciAodG9rZW4pIHtcbiAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gT1BFUkFUT1I7XG59XG4iLCIvKlxuICogRXhjZWwgZm9ybXVsYSBsYW5ndWFnZSBwYXJzZXJcbiAqXG4gKiBUaGlzIHBhcnNlciBpcyBhIFRvcC1Eb3duIE9wZXJhdG9yIFByZWNlZGVuY2UgKFByYXR0KSBwYXJzZXIuIEl0J3MgYmFzZWQgb25cbiAqIHRoZSBvbmUgdGhhdCBEb3VnbGFzIENyb2NrZm9yZCBkZXNjcmliZXMgaW4gQ2hhcHRlciA5IG9mIHRoZSBPJ1JlaWxseSBib29rXG4gKiBCZXV0aWZ1bCBDb2RlIChodHRwOi8vY3JvY2tmb3JkLmNvbS9qYXZhc2NyaXB0L3Rkb3AvdGRvcC5odG1sKS5cbiAqXG4gKiBUaGUgcGFyc2VyIGhhbmRsZXMgbW9zdCBiYXNpYyB0aGluZ3MgRXhjZWwvU2hlZXRzIGRvIGV4Y2VwdDpcbiAqIGBTaGVldDE6U2hlZXQyIUExYCByZWZlcmVuY2VzIGNyb3NzIGNvbnRleHRzICgzRCByZWZlcmVuY2VzKVxuICovXG5pbXBvcnQge1xuICBpc1JlZmVyZW5jZSxcbiAgaXNMaXRlcmFsLFxuICBpc0Z1bmN0aW9uLFxuICBpc1doaXRlc3BhY2UsXG4gIGlzRnhQcmVmaXgsXG4gIGlzT3BlcmF0b3IsXG4gIGlzRXJyb3Jcbn0gZnJvbSAnLi9pc1R5cGUuanMnO1xuaW1wb3J0IHtcbiAgVU5BUlksXG4gIEJJTkFSWSxcbiAgUkVGRVJFTkNFLFxuICBMSVRFUkFMLFxuICBFUlJPUl9MSVRFUkFMLFxuICBDQUxMLFxuICBMQU1CREEsXG4gIEFSUkFZLFxuICBJREVOVElGSUVSLFxuICBOVU1CRVIsXG4gIEJPT0xFQU4sXG4gIEVSUk9SLFxuICBTVFJJTkcsXG4gIExFVCxcbiAgTEVUX0RFQ0wsXG4gIFJFRl9OQU1FRCxcbiAgUkVGX1NUUlVDVCxcbiAgUkVGX0JFQU1cbn0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuXG5pbXBvcnQgeyB0b2tlbml6ZSB9IGZyb20gJy4vbGV4ZXIuanMnO1xuXG5jb25zdCBFTkQgPSAnKEVORCknO1xuY29uc3QgRlVOQ1RJT04gPSAnKEZVTkNUSU9OKSc7XG5jb25zdCBXSElURVNQQUNFID0gJyhXSElURVNQQUNFKSc7XG5cbmNvbnN0IHJlZkZ1bmN0aW9ucyA9IFtcbiAgJ0FOQ0hPUkFSUkFZJyxcbiAgJ0NIT09TRScsXG4gICdEUk9QJyxcbiAgJ0lGJyxcbiAgJ0lGUycsXG4gICdJTkRFWCcsXG4gICdJTkRJUkVDVCcsXG4gICdMQU1CREEnLFxuICAnTEVUJyxcbiAgJ09GRlNFVCcsXG4gICdSRURVQ0UnLFxuICAnU0lOR0xFJyxcbiAgJ1NXSVRDSCcsXG4gICdUQUtFJyxcbiAgJ1RSSU1SQU5HRScsXG4gICdYTE9PS1VQJ1xuXTtcblxuY29uc3Qgc3ltYm9sVGFibGUgPSB7fTtcbmxldCBjdXJyZW50Tm9kZTtcbmxldCB0b2tlbnM7XG5sZXQgdG9rZW5JbmRleDtcbmxldCBwZXJtaXRBcnJheVJhbmdlcyA9IGZhbHNlO1xubGV0IHBlcm1pdEFycmF5Q2FsbHMgPSBmYWxzZTtcbmxldCBsb29zZVJlZkNhbGxzID0gZmFsc2U7XG5cbmNvbnN0IGlzUmVmZXJlbmNlRnVuY3Rpb25OYW1lID0gZm5OYW1lID0+IHtcbiAgcmV0dXJuIGxvb3NlUmVmQ2FsbHMgfHwgcmVmRnVuY3Rpb25zLmluY2x1ZGVzKGZuTmFtZS50b1VwcGVyQ2FzZSgpKTtcbn07XG5cbmNvbnN0IGlzUmVmZXJlbmNlVG9rZW4gPSAodG9rZW4sIGFsbG93T3BlcmF0b3JzID0gZmFsc2UpID0+IHtcbiAgY29uc3QgdmFsdWUgPSAodG9rZW4gJiYgdG9rZW4udmFsdWUpICsgJyc7XG4gIGlmIChpc1JlZmVyZW5jZSh0b2tlbikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoYWxsb3dPcGVyYXRvcnMgJiYgaXNPcGVyYXRvcih0b2tlbikgJiYgKHZhbHVlID09PSAnOicgfHwgdmFsdWUgPT09ICcsJyB8fCAhdmFsdWUudHJpbSgpKSkge1xuICAgIHJldHVybiB0cnVlOyAvLyBqb2luLCB1bmlvbiwgaW50ZXJzZWN0aW9uXG4gIH1cbiAgaWYgKGlzRnVuY3Rpb24odG9rZW4pICYmIGlzUmVmZXJlbmNlRnVuY3Rpb25OYW1lKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlOyAvLyBmdW5jdGlvbiB0aGF0IHlpZWxkcyByZWZlcmVuY2VcbiAgfVxuICBpZiAoaXNFcnJvcih0b2tlbikgJiYgdmFsdWUgPT09ICcjUkVGIScpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCBpc1JlZmVyZW5jZU5vZGUgPSBub2RlID0+IHtcbiAgcmV0dXJuICghIW5vZGUpICYmIChcbiAgICAobm9kZS50eXBlID09PSBSRUZFUkVOQ0UpIHx8XG4gICAgKChub2RlLnR5cGUgPT09IEVSUk9SX0xJVEVSQUwgfHwgbm9kZS50eXBlID09PSBFUlJPUikgJiYgbm9kZS52YWx1ZSA9PT0gJyNSRUYhJykgfHxcbiAgICAobm9kZS50eXBlID09PSBCSU5BUlkgJiYgKFxuICAgICAgbm9kZS5vcGVyYXRvciA9PT0gJzonIHx8XG4gICAgICBub2RlLm9wZXJhdG9yID09PSAnICcgfHxcbiAgICAgIG5vZGUub3BlcmF0b3IgPT09ICcsJylcbiAgICApIHx8XG4gICAgaXNSZWZlcmVuY2Uobm9kZSkgfHxcbiAgICAobm9kZS50eXBlID09PSBDQUxMICYmIGlzUmVmZXJlbmNlRnVuY3Rpb25OYW1lKG5vZGUuY2FsbGVlLm5hbWUpKVxuICApO1xufTtcblxuZnVuY3Rpb24gaGFsdCAobWVzc2FnZSwgYXRJbmRleCA9IG51bGwpIHtcbiAgY29uc3QgZXJyID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICBlcnIuc291cmNlID0gdG9rZW5zLm1hcChkID0+IGQudmFsdWUpLmpvaW4oJycpO1xuICBlcnIuc291cmNlT2Zmc2V0ID0gdG9rZW5zXG4gICAgLnNsaWNlKDAsIGF0SW5kZXggPz8gdG9rZW5JbmRleClcbiAgICAucmVkdWNlKChhLCBkKSA9PiBhICsgZC52YWx1ZS5sZW5ndGgsIDApO1xuICB0aHJvdyBlcnI7XG59XG5cbi8vIEExIEExIHwgQTEgKEExKSB8IEExICgoQTEpKSB8IEExICggKEExKSApIHwgLi4uXG5mdW5jdGlvbiByZWZJc1VwY29taW5nIChhbGxvd09wZXJhdG9ycyA9IGZhbHNlKSB7XG4gIGxldCBpID0gdG9rZW5JbmRleDtcbiAgbGV0IG5leHQ7XG4gIGRvIHtcbiAgICBuZXh0ID0gdG9rZW5zWysraV07XG4gIH1cbiAgd2hpbGUgKFxuICAgIG5leHQgJiYgKFxuICAgICAgaXNXaGl0ZXNwYWNlKG5leHQpIHx8XG4gICAgICAoaXNPcGVyYXRvcihuZXh0KSAmJiBuZXh0LnZhbHVlID09PSAnKCcpXG4gICAgKVxuICApO1xuICByZXR1cm4gaXNSZWZlcmVuY2VUb2tlbihuZXh0LCBhbGxvd09wZXJhdG9ycyk7XG59XG5cbmZ1bmN0aW9uIGFkdmFuY2UgKGV4cGVjdE5leHQgPSBudWxsLCBsZWZ0Tm9kZSA9IG51bGwpIHtcbiAgaWYgKGV4cGVjdE5leHQgJiYgZXhwZWN0TmV4dCAhPT0gY3VycmVudE5vZGUuaWQpIHtcbiAgICBoYWx0KGBFeHBlY3RlZCAke2V4cGVjdE5leHR9IGJ1dCBnb3QgJHtjdXJyZW50Tm9kZS5pZH1gKTtcbiAgfVxuICAvLyBsb29rIGFoZWFkIHRvIHNlZSBpZiB3ZSBoYXZlICggKCBcIiBcIiwgXCIoXCIgKSsgUkVGIClcbiAgaWYgKGlzV2hpdGVzcGFjZSh0b2tlbnNbdG9rZW5JbmRleF0pKSB7XG4gICAgLy8gcG90ZW50aWFsIGludGVyc2VjdGlvbiBvcGVyYXRpb24gKHNvIGRvbid0IGFsbG93IG9wZXJhdG9ycyBhcyB1cGNvbWluZylcbiAgICBjb25zdCBoYXZlUmVmID0gaXNSZWZlcmVuY2VOb2RlKGxlZnROb2RlKTtcbiAgICBjb25zdCBwb3NzaWJsZVdTT3AgPSBoYXZlUmVmICYmIHJlZklzVXBjb21pbmcoZmFsc2UpO1xuICAgIGNvbnN0IG5leHRJc0NhbGwgPSBoYXZlUmVmICYmIHRva2Vuc1t0b2tlbkluZGV4ICsgMV0gJiYgdG9rZW5zW3Rva2VuSW5kZXggKyAxXS52YWx1ZSA9PT0gJygnO1xuICAgIGlmICghcG9zc2libGVXU09wICYmICFuZXh0SXNDYWxsKSB7XG4gICAgICAvLyBpZ25vcmUgd2hpdGVzcGFjZVxuICAgICAgd2hpbGUgKGlzV2hpdGVzcGFjZSh0b2tlbnNbdG9rZW5JbmRleF0pKSB7XG4gICAgICAgIHRva2VuSW5kZXgrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gRU9UXG4gIGlmICh0b2tlbkluZGV4ID49IHRva2Vucy5sZW5ndGgpIHtcbiAgICBjdXJyZW50Tm9kZSA9IHN5bWJvbFRhYmxlW0VORF07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdG9rZW4gPSB0b2tlbnNbdG9rZW5JbmRleF07XG4gIHRva2VuSW5kZXggKz0gMTtcblxuICBpZiAodG9rZW4udW50ZXJtaW5hdGVkKSB7XG4gICAgaGFsdCgnRW5jb3VudGVyZWQgYW4gdW50ZXJtaW5hdGVkIHRva2VuJyk7XG4gIH1cblxuICBsZXQgbm9kZTtcbiAgaWYgKGlzT3BlcmF0b3IodG9rZW4pKSB7XG4gICAgbm9kZSA9IHN5bWJvbFRhYmxlW3Rva2VuLnZhbHVlXTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIGhhbHQoYFVua25vd24gb3BlcmF0b3IgJHt0b2tlbi52YWx1ZX1gKTtcbiAgICB9XG4gIH1cbiAgZWxzZSBpZiAoaXNXaGl0ZXNwYWNlKHRva2VuKSkge1xuICAgIG5vZGUgPSBzeW1ib2xUYWJsZVtXSElURVNQQUNFXTtcbiAgfVxuICBlbHNlIGlmIChpc0xpdGVyYWwodG9rZW4pKSB7XG4gICAgbm9kZSA9IHN5bWJvbFRhYmxlW0xJVEVSQUxdO1xuICB9XG4gIGVsc2UgaWYgKGlzUmVmZXJlbmNlKHRva2VuKSkge1xuICAgIG5vZGUgPSBzeW1ib2xUYWJsZVtSRUZFUkVOQ0VdO1xuICB9XG4gIGVsc2UgaWYgKGlzRnVuY3Rpb24odG9rZW4pKSB7XG4gICAgbm9kZSA9IHN5bWJvbFRhYmxlW0ZVTkNUSU9OXTtcbiAgfVxuICBlbHNlIHtcbiAgICBoYWx0KGBVbmV4cGVjdGVkICR7dG9rZW4udHlwZX0gdG9rZW46ICR7dG9rZW4udmFsdWV9YCk7XG4gIH1cblxuICBjdXJyZW50Tm9kZSA9IE9iamVjdC5jcmVhdGUobm9kZSk7XG4gIGN1cnJlbnROb2RlLnR5cGUgPSB0b2tlbi50eXBlO1xuICBjdXJyZW50Tm9kZS52YWx1ZSA9IHRva2VuLnZhbHVlO1xuICBpZiAodG9rZW4ubG9jKSB7XG4gICAgY3VycmVudE5vZGUubG9jID0gWyAuLi50b2tlbi5sb2MgXTtcbiAgfVxuICByZXR1cm4gY3VycmVudE5vZGU7XG59XG5cbmZ1bmN0aW9uIGV4cHJlc3Npb24gKHJicCkge1xuICBsZXQgdCA9IGN1cnJlbnROb2RlO1xuICBhZHZhbmNlKG51bGwsIHQpO1xuICBsZXQgbGVmdCA9IHQubnVkKCk7XG4gIHdoaWxlIChyYnAgPCBjdXJyZW50Tm9kZS5sYnApIHtcbiAgICB0ID0gY3VycmVudE5vZGU7XG4gICAgYWR2YW5jZShudWxsLCB0KTtcbiAgICBsZWZ0ID0gdC5sZWQobGVmdCk7XG4gIH1cbiAgcmV0dXJuIGxlZnQ7XG59XG5cbmNvbnN0IG9yaWdpbmFsX3N5bWJvbCA9IHtcbiAgLy8gbnVsbCBkZW5vdGF0aW9uXG4gIG51ZDogKCkgPT4gaGFsdCgnSW52YWxpZCBzeW50YXgnKSwgLy8gVW5kZWZpbmVkXG4gIC8vIGxlZnQgZGVub3RhdGlvblxuICBsZWQ6ICgpID0+IGhhbHQoJ01pc3Npbmcgb3BlcmF0b3InKVxufTtcblxuLy8gYnAgPSBiaW5kaW5nIHBvd2VyXG5mdW5jdGlvbiBzeW1ib2wgKGlkLCBicCA9IDApIHtcbiAgbGV0IHMgPSBzeW1ib2xUYWJsZVtpZF07XG4gIGlmIChzKSB7XG4gICAgaWYgKGJwID49IHMubGJwKSB7XG4gICAgICBzLmxicCA9IGJwO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICBzID0geyAuLi5vcmlnaW5hbF9zeW1ib2wgfTtcbiAgICBzLmlkID0gaWQ7XG4gICAgcy52YWx1ZSA9IGlkO1xuICAgIHMubGJwID0gYnA7XG4gICAgc3ltYm9sVGFibGVbaWRdID0gcztcbiAgfVxuICByZXR1cm4gcztcbn1cblxuZnVuY3Rpb24gaW5maXggKGlkLCBicCwgbGVkKSB7XG4gIGNvbnN0IHMgPSBzeW1ib2woaWQsIGJwKTtcbiAgcy5sZWQgPSBsZWQgfHwgZnVuY3Rpb24gKGxlZnQpIHtcbiAgICB0aGlzLnR5cGUgPSBCSU5BUlk7XG4gICAgdGhpcy5vcGVyYXRvciA9IHRoaXMudmFsdWU7XG4gICAgZGVsZXRlIHRoaXMudmFsdWU7XG4gICAgY29uc3QgcmlnaHQgPSBleHByZXNzaW9uKGJwKTtcbiAgICB0aGlzLmFyZ3VtZW50cyA9IFsgbGVmdCwgcmlnaHQgXTtcbiAgICBpZiAodGhpcy5sb2MpIHtcbiAgICAgIHRoaXMubG9jID0gWyBsZWZ0LmxvY1swXSwgcmlnaHQubG9jWzFdIF07XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICByZXR1cm4gcztcbn1cblxuZnVuY3Rpb24gcG9zdGZpeCAoaWQsIGxlZCkge1xuICBjb25zdCBzID0gc3ltYm9sKGlkLCAwKTtcbiAgcy5sYnAgPSA3MDtcbiAgcy5sZWQgPSBsZWQgfHwgZnVuY3Rpb24gKGxlZnQpIHtcbiAgICB0aGlzLnR5cGUgPSBVTkFSWTtcbiAgICB0aGlzLm9wZXJhdG9yID0gdGhpcy52YWx1ZTtcbiAgICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgICB0aGlzLmFyZ3VtZW50cyA9IFsgbGVmdCBdO1xuICAgIGlmICh0aGlzLmxvYykge1xuICAgICAgdGhpcy5sb2NbMF0gPSBsZWZ0LmxvY1swXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIHJldHVybiBzO1xufVxuXG5mdW5jdGlvbiBwcmVmaXggKGlkLCBudWQpIHtcbiAgY29uc3QgcyA9IHN5bWJvbChpZCk7XG4gIHMubnVkID0gbnVkIHx8IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnR5cGUgPSBVTkFSWTtcbiAgICB0aGlzLm9wZXJhdG9yID0gdGhpcy52YWx1ZTtcbiAgICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgICBjb25zdCBzdWJleHByID0gZXhwcmVzc2lvbig3MCk7XG4gICAgdGhpcy5hcmd1bWVudHMgPSBbIHN1YmV4cHIgXTtcbiAgICBpZiAodGhpcy5sb2MpIHtcbiAgICAgIHRoaXMubG9jWzFdID0gc3ViZXhwci5sb2NbMV07XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICByZXR1cm4gcztcbn1cblxuZnVuY3Rpb24gcmFuZ2VJbmZpeCAoaWQsIGJwKSB7XG4gIHJldHVybiBpbmZpeChpZCwgYnAsIGZ1bmN0aW9uIChsZWZ0KSB7XG4gICAgaWYgKCFpc1JlZmVyZW5jZU5vZGUobGVmdCkpIHtcbiAgICAgIGhhbHQoYFVuZXhwZWN0ZWQgJHtpZH0gb3BlcmF0b3JgKTtcbiAgICB9XG4gICAgY29uc3QgcmlnaHQgPSBleHByZXNzaW9uKGJwKTtcbiAgICBpZiAoIWlzUmVmZXJlbmNlTm9kZShyaWdodCwgdHJ1ZSkpIHtcbiAgICAgIGhhbHQoYFVuZXhwZWN0ZWQgJHtjdXJyZW50Tm9kZS50eXBlfSBmb2xsb3dpbmcgJHt0aGlzLmlkfWApO1xuICAgIH1cbiAgICB0aGlzLnR5cGUgPSBCSU5BUlk7XG4gICAgdGhpcy5vcGVyYXRvciA9IHRoaXMudmFsdWUudHJpbSgpID8gdGhpcy52YWx1ZSA6ICcgJzsgLy8gaGFjayBhcm91bmQgd2hpdGVzcGFjZSBvcFxuICAgIGRlbGV0ZSB0aGlzLnZhbHVlO1xuICAgIHRoaXMuYXJndW1lbnRzID0gWyBsZWZ0LCByaWdodCBdO1xuICAgIGlmICh0aGlzLmxvYykge1xuICAgICAgdGhpcy5sb2MgPSBbIGxlZnQubG9jWzBdLCByaWdodC5sb2NbMV0gXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xufVxuXG5zeW1ib2woRU5EKTtcblxuLy8gcmVmZXJlbmNlIG9wZXJhdG9yc1xucmFuZ2VJbmZpeCgnOicsIDgwKTsgLy8gcmFuZ2Ugam9pbi9leHRlbmQgPUI3Ok9GRlNFVChBMSwxMCwxMClcbmNvbnN0IGNvbW1hID0gcmFuZ2VJbmZpeCgnLCcsIDgwKTsgLy8gdW5pb24gPUI3OkQ3LEM2OkM4XG5yYW5nZUluZml4KFdISVRFU1BBQ0UsIDgwKTsgLy8gaW50ZXJzZWN0OiA9Qjc6RDcgQzY6QzhcblxuLy8gRXhjZWwncyBncmFtbWFyIGlzIGFtYmlndW91cy4gVGhpcyB0dXJucyB0aGUgLCBvcGVyYXRvcidzIGxlZnQgYmluZGluZ1xuLy8gcG93ZXIgb24vb2ZmIHdoaWNoIGFsbG93cyB1cyB0byB0cmVhdCAsIGFzIGEgc3ltYm9sIHdoZXJlIHdlIG5lZWQuXG5jb25zdCB1bmlvblJlZnMgPSBlbmFibGUgPT4ge1xuICBjb25zdCBjdXJyU3RhdGUgPSBjb21tYS5sYnAgPiAwO1xuICBpZiAoZW5hYmxlICE9IG51bGwpIHsgY29tbWEubGJwID0gZW5hYmxlID8gODAgOiAwOyB9XG4gIHJldHVybiBjdXJyU3RhdGU7XG59O1xuXG4vLyBhcml0aG1ldGljIGFuZCBzdHJpbmcgb3BlcmF0aW9uc1xucG9zdGZpeCgnJScpOyAvLyBwZXJjZW50XG5wb3N0Zml4KCcjJywgZnVuY3Rpb24gKGxlZnQpIHsgLy8gc3BpbGxlZCByYW5nZSAoX3hsZm4uQU5DSE9SQVJSQVkpXG4gIGlmICghaXNSZWZlcmVuY2VOb2RlKGxlZnQpKSB7XG4gICAgaGFsdCgnIyBleHBlY3RzIGEgcmVmZXJlbmNlJyk7XG4gIH1cbiAgdGhpcy50eXBlID0gVU5BUlk7XG4gIHRoaXMub3BlcmF0b3IgPSB0aGlzLnZhbHVlO1xuICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgdGhpcy5hcmd1bWVudHMgPSBbIGxlZnQgXTtcbiAgcmV0dXJuIHRoaXM7XG59KTsgLy8gcmFuZ2VcbnByZWZpeCgnKycpOyAvLyB1bmFyeSBwbHVzXG5wcmVmaXgoJy0nKTsgLy8gdW5hcnkgbWludXNcbnByZWZpeCgnQCcpOyAvLyBpbXBsaWNpdCBpbnRlcnNlY3Rpb24gKF94bGZuLlNJTkdMRSlcbmluZml4KCdeJywgNTApOyAvLyBwb3dlclxuaW5maXgoJyonLCA0MCk7IC8vIG11bHRpcGx5XG5pbmZpeCgnLycsIDQwKTsgLy8gZGl2aWRlXG5pbmZpeCgnKycsIDMwKTsgLy8gYWRkXG5pbmZpeCgnLScsIDMwKTsgLy8gc3VidHJhY3RcbmluZml4KCcmJywgMjApOyAvLyB0ZXh0IGNvbmNhdFxuXG4vLyBjb21wYXJpc29uXG5pbmZpeCgnPScsIDEwKTtcbmluZml4KCc8JywgMTApO1xuaW5maXgoJz4nLCAxMCk7XG5pbmZpeCgnPD0nLCAxMCk7XG5pbmZpeCgnPj0nLCAxMCk7XG5pbmZpeCgnPD4nLCAxMCk7XG5zeW1ib2woTElURVJBTCkubnVkID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCB7IHR5cGUsIHZhbHVlIH0gPSB0aGlzO1xuICB0aGlzLnR5cGUgPSBMSVRFUkFMO1xuICB0aGlzLnJhdyA9IHZhbHVlO1xuICBpZiAodHlwZSA9PT0gTlVNQkVSKSB7XG4gICAgdGhpcy52YWx1ZSA9ICt2YWx1ZTtcbiAgfVxuICBlbHNlIGlmICh0eXBlID09PSBCT09MRUFOKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlLnRvVXBwZXJDYXNlKCkgPT09ICdUUlVFJztcbiAgfVxuICBlbHNlIGlmICh0eXBlID09PSBFUlJPUikge1xuICAgIHRoaXMudHlwZSA9IEVSUk9SX0xJVEVSQUw7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlLnRvVXBwZXJDYXNlKCk7XG4gIH1cbiAgZWxzZSBpZiAodHlwZSA9PT0gU1RSSU5HKSB7XG4gICAgLy8gRklYTUU6IHRocm93IGFuIGVycm9yIGlmIHRoZSBzdHJpbmcgaXMgdW50ZXJtaW5hdGVkXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlLnNsaWNlKDEsIC0xKS5yZXBsYWNlKC9cIlwiL2csICdcIicpO1xuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgbGl0ZXJhbCB0eXBlOiAnICsgdHlwZSk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuc3ltYm9sKFJFRkVSRU5DRSkubnVkID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy50eXBlID09PSBSRUZfTkFNRUQpIHtcbiAgICB0aGlzLmtpbmQgPSAnbmFtZSc7XG4gIH1cbiAgZWxzZSBpZiAodGhpcy50eXBlID09PSBSRUZfU1RSVUNUKSB7XG4gICAgdGhpcy5raW5kID0gJ3RhYmxlJzsgLy8gc3RydWN0dXJlZCA/XG4gIH1cbiAgZWxzZSBpZiAodGhpcy50eXBlID09PSBSRUZfQkVBTSkge1xuICAgIHRoaXMua2luZCA9ICdiZWFtJztcbiAgfVxuICBlbHNlIHtcbiAgICB0aGlzLmtpbmQgPSAncmFuZ2UnO1xuICB9XG4gIHRoaXMudHlwZSA9IFJFRkVSRU5DRTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBwYXJlbnNcbnN5bWJvbCgnKScpO1xucHJlZml4KCcoJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBwcmV2U3RhdGUgPSB1bmlvblJlZnModHJ1ZSk7XG4gIGNvbnN0IGUgPSBleHByZXNzaW9uKDApO1xuICBhZHZhbmNlKCcpJywgZSk7XG4gIHVuaW9uUmVmcyhwcmV2U3RhdGUpO1xuICByZXR1cm4gZTtcbn0pO1xuXG4vLyBmdW5jdGlvbiBjYWxsXG5zeW1ib2woRlVOQ1RJT04pLm51ZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuaW5maXgoJygnLCA5MCwgZnVuY3Rpb24gKGxlZnQpIHtcbiAgbGV0IGNhbGxlZSA9IHtcbiAgICB0eXBlOiBJREVOVElGSUVSLFxuICAgIG5hbWU6IGxlZnQudmFsdWVcbiAgfTtcbiAgaWYgKGxlZnQuaWQgIT09IEZVTkNUSU9OKSB7XG4gICAgaWYgKFxuICAgICAgbGVmdC50eXBlID09PSBMQU1CREEgfHxcbiAgICAgIC8vIEV4Y2VsIG9ubHkgYWxsb3dzIGNhbGxzIHRvIFwibmFtZXNcIiBhbmQgcmVmIGZ1bmN0aW9ucy4gU2luY2Ugd2UgZG9uJ3RcbiAgICAgIC8vIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGUgdHdvICh0aGlzIHJlcXVpcmVzIGEgdGFibGUgb2YgZnVuY3Rpb24gbmFtZXMpXG4gICAgICAvLyB3ZSdyZSBvdmVybHkgcGVybWlzc2l2ZSBoZXJlOlxuICAgICAgbGVmdC50eXBlID09PSBDQUxMIHx8XG4gICAgICBsZWZ0LnR5cGUgPT09IExFVCB8fFxuICAgICAgbGVmdC50eXBlID09PSBSRUZFUkVOQ0UgfHxcbiAgICAgIChsZWZ0LnR5cGUgPT09IFVOQVJZICYmIGxlZnQudmFsdWUgPT09ICcjJykgfHwgLy8gQmVjYXVzZSBpdCdzIHJlYWxseSBTSU5HTEUoLi4uKSgpXG4gICAgICAobGVmdC50eXBlID09PSBFUlJPUl9MSVRFUkFMICYmIGxlZnQudmFsdWUgPT09ICcjUkVGIScpXG4gICAgKSB7XG4gICAgICAvLyBpbiB0aGUgY2FzZSBvZiBSRUZFUkVOQ0UsIGRvIHdlIHdhbnQgdG8gc2V0IHRoZSBub2RlIHRvIElkZW50aWZpZXI/XG4gICAgICBjYWxsZWUgPSBsZWZ0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGhhbHQoJ1VuZXhwZWN0ZWQgY2FsbCcsIHRva2VuSW5kZXggLSAxKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgbGNGbiA9IGxlZnQudmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGxjRm4gPT09ICdsYW1iZGEnKSB7XG4gICAgcmV0dXJuIHBhcnNlTGFtYmRhLmNhbGwodGhpcywgbGVmdCk7XG4gIH1cbiAgaWYgKGxjRm4gPT09ICdsZXQnKSB7XG4gICAgcmV0dXJuIHBhcnNlTGV0LmNhbGwodGhpcywgbGVmdCk7XG4gIH1cbiAgY29uc3QgYXJncyA9IFtdO1xuICBsZXQgbGFzdFdhc0NvbW1hID0gZmFsc2U7XG4gIGlmIChjdXJyZW50Tm9kZS5pZCAhPT0gJyknKSB7XG4gICAgY29uc3QgcHJldlN0YXRlID0gdW5pb25SZWZzKGZhbHNlKTtcbiAgICB3aGlsZSAoY3VycmVudE5vZGUuaWQgIT09ICcpJykge1xuICAgICAgaWYgKGlzV2hpdGVzcGFjZShjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnROb2RlLmlkID09PSAnLCcpIHtcbiAgICAgICAgYXJncy5wdXNoKG51bGwpO1xuICAgICAgICBsYXN0V2FzQ29tbWEgPSB0cnVlO1xuICAgICAgICBhZHZhbmNlKCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgYXJnID0gZXhwcmVzc2lvbigwKTtcbiAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgIGxhc3RXYXNDb21tYSA9IGZhbHNlO1xuICAgICAgICBpZiAoY3VycmVudE5vZGUuaWQgPT09ICcsJykge1xuICAgICAgICAgIGFkdmFuY2UoJywnKTtcbiAgICAgICAgICBsYXN0V2FzQ29tbWEgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHVuaW9uUmVmcyhwcmV2U3RhdGUpO1xuICB9XG4gIGlmIChsYXN0V2FzQ29tbWEpIHtcbiAgICBhcmdzLnB1c2gobnVsbCk7XG4gIH1cbiAgY29uc3QgY2xvc2VQYXJlbiA9IGN1cnJlbnROb2RlO1xuICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgdGhpcy50eXBlID0gQ0FMTDtcbiAgdGhpcy5jYWxsZWUgPSBjYWxsZWU7XG4gIGlmIChsZWZ0LmxvYykge1xuICAgIHRoaXMuY2FsbGVlLmxvYyA9IFsgLi4ubGVmdC5sb2MgXTtcbiAgfVxuICB0aGlzLmFyZ3VtZW50cyA9IGFyZ3M7XG4gIGlmIChsZWZ0LmxvYykge1xuICAgIHRoaXMubG9jID0gWyBsZWZ0LmxvY1swXSwgY2xvc2VQYXJlbi5sb2NbMV0gXTtcbiAgfVxuICBhZHZhbmNlKCcpJywgdGhpcyk7XG4gIHJldHVybiB0aGlzO1xufSk7XG5cbmZ1bmN0aW9uIHBhcnNlTGFtYmRhIChsZWZ0KSB7XG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgY29uc3QgYXJnTmFtZXMgPSB7fTtcbiAgbGV0IGJvZHk7XG4gIGxldCBkb25lID0gZmFsc2U7XG4gIGNvbnN0IHByZXZTdGF0ZSA9IHVuaW9uUmVmcyhmYWxzZSk7XG4gIGlmIChjdXJyZW50Tm9kZS5pZCAhPT0gJyknKSB7XG4gICAgd2hpbGUgKCFkb25lKSB7XG4gICAgICBpZiAoaXNXaGl0ZXNwYWNlKGN1cnJlbnROb2RlKSkge1xuICAgICAgICBhZHZhbmNlKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBhcmdUb2tlbkluZGV4ID0gdG9rZW5JbmRleDtcbiAgICAgIGNvbnN0IGFyZyA9IGV4cHJlc3Npb24oMCk7XG4gICAgICBpZiAoY3VycmVudE5vZGUuaWQgPT09ICcsJykge1xuICAgICAgICAvLyBhbGwgYnV0IGxhc3QgYXJncyBtdXN0IGJlIG5hbWVzXG4gICAgICAgIGlmIChhcmcudHlwZSA9PT0gUkVGRVJFTkNFICYmIGFyZy5raW5kID09PSAnbmFtZScpIHtcbiAgICAgICAgICAvLyBuYW1lcyBtYXkgbm90IGJlIGR1cGxpY2F0ZXNcbiAgICAgICAgICBjb25zdCBjdXJyTmFtZSA9IGFyZy52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGlmIChjdXJyTmFtZSBpbiBhcmdOYW1lcykge1xuICAgICAgICAgICAgaGFsdCgnRHVwbGljYXRlIG5hbWU6ICcgKyBhcmcudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhcmdOYW1lc1tjdXJyTmFtZV0gPSAxO1xuICAgICAgICAgIGNvbnN0IGEgPSB7IHR5cGU6IElERU5USUZJRVIsIG5hbWU6IGFyZy52YWx1ZSB9O1xuICAgICAgICAgIGlmIChhcmcubG9jKSB7IGEubG9jID0gYXJnLmxvYzsgfVxuICAgICAgICAgIGFyZ3MucHVzaChhKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0b2tlbkluZGV4ID0gYXJnVG9rZW5JbmRleDtcbiAgICAgICAgICBoYWx0KCdMQU1CREEgYXJndW1lbnQgaXMgbm90IGEgbmFtZScpO1xuICAgICAgICB9XG4gICAgICAgIGFkdmFuY2UoJywnKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBib2R5ID0gYXJnO1xuICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdW5pb25SZWZzKHByZXZTdGF0ZSk7XG4gIGRlbGV0ZSB0aGlzLnZhbHVlO1xuICB0aGlzLnR5cGUgPSBMQU1CREE7XG4gIHRoaXMucGFyYW1zID0gYXJncztcbiAgdGhpcy5ib2R5ID0gYm9keSB8fCBudWxsO1xuICBpZiAobGVmdC5sb2MpIHtcbiAgICB0aGlzLmxvYyA9IFsgbGVmdC5sb2NbMF0sIGN1cnJlbnROb2RlLmxvY1sxXSBdO1xuICB9XG4gIGFkdmFuY2UoJyknLCB0aGlzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGV0IChsZWZ0KSB7XG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgY29uc3QgdmFscyA9IFtdO1xuICBjb25zdCBhcmdOYW1lcyA9IHt9O1xuICBsZXQgYm9keTtcbiAgbGV0IGFyZ0NvdW50ZXIgPSAwO1xuICBjb25zdCBhZGRBcmd1bWVudCA9IChhcmcsIGxhc3RBcmcpID0+IHtcbiAgICBpZiAoYm9keSkge1xuICAgICAgaGFsdCgnVW5leHBlY3RlZCBhcmd1bWVudCBmb2xsb3dpbmcgY2FsY3VsYXRpb24nKTtcbiAgICB9XG4gICAgaWYgKGxhc3RBcmcgJiYgYXJnQ291bnRlciA+PSAyKSB7XG4gICAgICBib2R5ID0gYXJnO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IHdhbnROYW1lID0gIShhcmdDb3VudGVyICUgMik7XG4gICAgICBpZiAod2FudE5hbWUpIHtcbiAgICAgICAgaWYgKGFyZyAmJiAoYXJnLnR5cGUgPT09IFJFRkVSRU5DRSAmJiBhcmcua2luZCA9PT0gJ25hbWUnKSkge1xuICAgICAgICAgIC8vIG5hbWVzIG1heSBub3QgYmUgZHVwbGljYXRlc1xuICAgICAgICAgIGNvbnN0IGN1cnJOYW1lID0gYXJnLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKGN1cnJOYW1lIGluIGFyZ05hbWVzKSB7XG4gICAgICAgICAgICBoYWx0KCdEdXBsaWNhdGUgbmFtZTogJyArIGFyZy52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFyZ05hbWVzW2N1cnJOYW1lXSA9IDE7XG4gICAgICAgICAgYXJncy5wdXNoKHsgdHlwZTogSURFTlRJRklFUiwgbmFtZTogYXJnLnZhbHVlLCBsb2M6IGFyZy5sb2MgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJnQ291bnRlciA+PSAyKSB7XG4gICAgICAgICAgYm9keSA9IGFyZztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBoYWx0KCdBcmd1bWVudCBpcyBub3QgYSBuYW1lJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB2YWxzLnB1c2goYXJnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXJnQ291bnRlcisrO1xuICB9O1xuICBjb25zdCBwcmV2U3RhdGUgPSB1bmlvblJlZnMoZmFsc2UpO1xuICBsZXQgbGFzdFdhc0NvbW1hID0gZmFsc2U7XG4gIGlmIChjdXJyZW50Tm9kZS5pZCAhPT0gJyknKSB7XG4gICAgd2hpbGUgKGN1cnJlbnROb2RlLmlkICE9PSAnKScpIHtcbiAgICAgIGlmIChpc1doaXRlc3BhY2UoY3VycmVudE5vZGUpKSB7XG4gICAgICAgIGFkdmFuY2UoKTtcbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50Tm9kZS5pZCA9PT0gJywnKSB7XG4gICAgICAgIGFkZEFyZ3VtZW50KG51bGwpO1xuICAgICAgICBsYXN0V2FzQ29tbWEgPSB0cnVlO1xuICAgICAgICBhZHZhbmNlKCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgYXJnID0gZXhwcmVzc2lvbigwKTtcbiAgICAgICAgYWRkQXJndW1lbnQoYXJnLCBjdXJyZW50Tm9kZS5pZCAhPT0gJywnKTtcbiAgICAgICAgbGFzdFdhc0NvbW1hID0gZmFsc2U7XG4gICAgICAgIGlmIChjdXJyZW50Tm9kZS5pZCA9PT0gJywnKSB7XG4gICAgICAgICAgYWR2YW5jZSgnLCcpO1xuICAgICAgICAgIGxhc3RXYXNDb21tYSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdW5pb25SZWZzKHByZXZTdGF0ZSk7XG4gIH1cbiAgaWYgKGxhc3RXYXNDb21tYSkge1xuICAgIGFkZEFyZ3VtZW50KG51bGwsIHRydWUpO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZmluZWRcbiAgaWYgKGJvZHkgPT09IHVuZGVmaW5lZCkge1xuICAgIGhhbHQoJ1VuZXhwZWN0ZWQgZW5kIG9mIGFyZ3VtZW50cycpO1xuICB9XG4gIHVuaW9uUmVmcyhwcmV2U3RhdGUpO1xuICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgdGhpcy50eXBlID0gTEVUO1xuICB0aGlzLmRlY2xhcmF0aW9ucyA9IFtdO1xuICBpZiAoIWFyZ3MubGVuZ3RoKSB7XG4gICAgaGFsdCgnVW5leHBlY3RlZCBlbmQgb2YgYXJndW1lbnRzJyk7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcyA9IHtcbiAgICAgIHR5cGU6IExFVF9ERUNMLFxuICAgICAgaWQ6IGFyZ3NbaV0sXG4gICAgICBpbml0OiB2YWxzW2ldLFxuICAgICAgbG9jOiBhcmdzW2ldLmxvYyAmJiBbIGFyZ3NbaV0ubG9jWzBdLCB2YWxzW2ldLmxvY1sxXSBdXG4gICAgfTtcbiAgICB0aGlzLmRlY2xhcmF0aW9ucy5wdXNoKHMpO1xuICB9XG4gIHRoaXMuYm9keSA9IGJvZHk7XG4gIGlmIChsZWZ0LmxvYykge1xuICAgIHRoaXMubG9jID0gWyBsZWZ0LmxvY1swXSwgY3VycmVudE5vZGUubG9jWzFdIF07XG4gIH1cbiAgYWR2YW5jZSgnKScsIHRoaXMpO1xuICByZXR1cm4gdGhpcztcbn1cblxuLy8gYXJyYXkgbGl0ZXJhbFxuc3ltYm9sKCd9Jyk7XG5zeW1ib2woJzsnKTtcbnByZWZpeCgneycsIGZ1bmN0aW9uICgpIHtcbiAgaWYgKGN1cnJlbnROb2RlLmlkID09PSAnfScpIHsgLy8gYXJyYXlzIG11c3Qgbm90IGJlIGVtcHR5XG4gICAgaGFsdCgnVW5leHBlY3RlZCBlbXB0eSBhcnJheScpO1xuICB9XG4gIGxldCByb3cgPSBbXTtcbiAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgY29uc3Qgcm93cyA9IFsgcm93IF07XG4gIGNvbnN0IHByZXZTdGF0ZSA9IHVuaW9uUmVmcyhmYWxzZSk7XG4gIHdoaWxlICghZG9uZSkge1xuICAgIGlmIChpc1doaXRlc3BhY2UoY3VycmVudE5vZGUpKSB7XG4gICAgICBhZHZhbmNlKCk7XG4gICAgfVxuICAgIC8vIGFycmF5cyBhbGxvdyBvbmx5IGxpdGVyYWxzLCByYW5nZXMgKGluIEdTaGVldHMpIGFuZCAsOzogb3BlcmF0b3JzLlxuICAgIC8vIEZJWE1FOiBpZiB7IG5lZ2F0aXZlTnVtYmVyczogZmFsc2UgfSB3ZSBtdXN0IGNvbnN1bWUgbWludXNlcyBhcyB3ZWxsLlxuICAgIC8vIEV4Y2VsIGFsbG93cyA9ey0xfSBidXQgbm90ID17KC0xKX0gYW5kID17MSV9XG4gICAgaWYgKGlzTGl0ZXJhbChjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJvdy5wdXNoKHN5bWJvbFRhYmxlW0xJVEVSQUxdLm51ZC5jYWxsKGN1cnJlbnROb2RlKSk7XG4gICAgICBhZHZhbmNlKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHBlcm1pdEFycmF5UmFuZ2VzICYmIGlzUmVmZXJlbmNlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJvdy5wdXNoKHN5bWJvbFRhYmxlW1JFRkVSRU5DRV0ubnVkLmNhbGwoY3VycmVudE5vZGUpKTtcbiAgICAgIGFkdmFuY2UoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAocGVybWl0QXJyYXlDYWxscyAmJiBpc0Z1bmN0aW9uKGN1cnJlbnROb2RlKSkge1xuICAgICAgY29uc3QgYXJnID0gZXhwcmVzc2lvbigwKTtcbiAgICAgIHJvdy5wdXNoKGFyZyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaGFsdChgVW5leHBlY3RlZCAke2N1cnJlbnROb2RlLnR5cGV9IGluIGFycmF5OiAke2N1cnJlbnROb2RlLnZhbHVlfWApO1xuICAgIH1cbiAgICBpZiAoY3VycmVudE5vZGUuaWQgPT09ICcsJykge1xuICAgICAgLy8gbmV4dCBpdGVtXG4gICAgICBhZHZhbmNlKCcsJyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGN1cnJlbnROb2RlLmlkID09PSAnOycpIHtcbiAgICAgIC8vIG5leHQgcm93XG4gICAgICBhZHZhbmNlKCc7Jyk7XG4gICAgICByb3cgPSBbXTtcbiAgICAgIHJvd3MucHVzaChyb3cpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGRvbmUgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBjb25zdCBjbG9zaW5nQnJhY2UgPSBjdXJyZW50Tm9kZTtcbiAgYWR2YW5jZSgnfScpO1xuICB1bmlvblJlZnMocHJldlN0YXRlKTtcbiAgdGhpcy50eXBlID0gQVJSQVk7XG4gIHRoaXMuZWxlbWVudHMgPSByb3dzO1xuICBpZiAodGhpcy5sb2MpIHtcbiAgICB0aGlzLmxvY1sxXSA9IGNsb3NpbmdCcmFjZS5sb2NbMV07XG4gIH1cbiAgZGVsZXRlIHRoaXMudmFsdWU7XG4gIHJldHVybiB0aGlzO1xufSk7XG5cbi8qKlxuICogUGFyc2VzIGEgc3RyaW5nIGZvcm11bGEgb3IgbGlzdCBvZiB0b2tlbnMgaW50byBhbiBBU1QuXG4gKlxuICogVGhlIHBhcnNlciByZXF1aXJlcyBgbWVyZ2VSZWZzYCB0byBoYXZlIGJlZW4gYHRydWVgIGluIHRva2VubGlzdCBvcHRpb25zLFxuICogYmVjYXVzZSBpdCBkb2VzIG5vdCByZWNvZ25pemUgcmVmZXJlbmNlIGNvbnRleHQgdG9rZW5zLlxuICpcbiAqIFRoZSBBU1QgQWJzdHJhY3QgU3ludGF4IFRyZWUncyBmb3JtYXQgaXMgZG9jdW1lbnRlZCBpblxuICogW0FTVF9mb3JtYXQubWRdKC4vQVNUX2Zvcm1hdC5tZClcbiAqXG4gKiBAc2VlIG5vZGVUeXBlc1xuICogQHBhcmFtIHsoc3RyaW5nIHwgVG9rZW5bXSl9IGZvcm11bGEgQW4gRXhjZWwgZm9ybXVsYSBzdHJpbmcgKGFuIEV4Y2VsIGV4cHJlc3Npb24pIG9yIGFuIGFycmF5IG9mIHRva2Vucy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gIE9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYWxsb3dOYW1lZD10cnVlXSAgRW5hYmxlIHBhcnNpbmcgbmFtZXMgYXMgd2VsbCBhcyByYW5nZXMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93VGVybmFyeT1mYWxzZV0gIEVuYWJsZXMgdGhlIHJlY29nbml0aW9uIG9mIHRlcm5hcnkgcmFuZ2VzIGluIHRoZSBzdHlsZSBvZiBgQTE6QWAgb3IgYEExOjFgLiBUaGVzZSBhcmUgc3VwcG9ydGVkIGJ5IEdvb2dsZSBTaGVldHMgYnV0IG5vdCBFeGNlbC4gU2VlOiBSZWZlcmVuY2VzLm1kLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5uZWdhdGl2ZU51bWJlcnM9dHJ1ZV0gIE1lcmdlcyB1bmFyeSBtaW51c2VzIHdpdGggdGhlaXIgaW1tZWRpYXRlbHkgZm9sbG93aW5nIG51bWJlciB0b2tlbnMgKGAtYCxgMWApID0+IGAtMWAgKGFsdGVybmF0aXZlbHkgdGhlc2Ugd2lsbCBiZSB1bmFyeSBvcGVyYXRpb25zIGluIHRoZSB0cmVlKS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucGVybWl0QXJyYXlSYW5nZXM9ZmFsc2VdICBSYW5nZXMgYXJlIGFsbG93ZWQgYXMgZWxlbWVudHMgb2YgYXJyYXlzLiBUaGlzIGlzIGEgZmVhdHVyZSBpbiBHb29nbGUgU2hlZXRzIHdoaWxlIEV4Y2VsIGRvZXMgbm90IGFsbG93IGl0LlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5wZXJtaXRBcnJheUNhbGxzPWZhbHNlXSAgRnVuY3Rpb24gY2FsbHMgYXJlIGFsbG93ZWQgYXMgZWxlbWVudHMgb2YgYXJyYXlzLiBUaGlzIGlzIGEgZmVhdHVyZSBpbiBHb29nbGUgU2hlZXRzIHdoaWxlIEV4Y2VsIGRvZXMgbm90IGFsbG93IGl0LlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5sb29zZVJlZkNhbGxzPWZhbHNlXSAgUGVybWl0cyBhbnkgZnVuY3Rpb24gY2FsbCB3aGVyZSBvdGhlcndpc2Ugb25seSBmdW5jdGlvbnMgdGhhdCByZXR1cm4gcmVmZXJlbmNlcyB3b3VsZCBiZSBwZXJtaXR0ZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnIxYzE9ZmFsc2VdICBSYW5nZXMgYXJlIGV4cGVjdGVkIHRvIGJlIGluIHRoZSBSMUMxIHN0eWxlIGZvcm1hdCByYXRoZXIgdGhhbiB0aGUgbW9yZSBwb3B1bGFyIEExIHN0eWxlLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy53aXRoTG9jYXRpb249ZmFsc2VdICBOb2RlcyB3aWxsIGluY2x1ZGUgc291cmNlIHBvc2l0aW9uIG9mZnNldHMgdG8gdGhlIHRva2VuczogYHsgbG9jOiBbIHN0YXJ0LCBlbmQgXSB9YFxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy54bHN4PWZhbHNlXSAgU3dpdGNoZXMgdG8gdGhlIGBbMV1TaGVldDEhQTFgIG9yIGBbMV0hbmFtZWAgcHJlZml4IHN5bnRheCBmb3JtIGZvciBleHRlcm5hbCB3b3JrYm9va3MuIFNlZTogW1ByZWZpeGVzLm1kXSguL1ByZWZpeGVzLm1kKVxuICogQHJldHVybnMge0FzdEV4cHJlc3Npb259IEFuIEFTVCBvZiBub2Rlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UgKGZvcm11bGEsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBmb3JtdWxhID09PSAnc3RyaW5nJykge1xuICAgIHRva2VucyA9IHRva2VuaXplKGZvcm11bGEsIHtcbiAgICAgIHdpdGhMb2NhdGlvbjogZmFsc2UsXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgbWVyZ2VSZWZzOiB0cnVlXG4gICAgfSk7XG4gIH1cbiAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShmb3JtdWxhKSkge1xuICAgIHRva2VucyA9IGZvcm11bGE7XG4gIH1cbiAgZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQYXJzZSByZXF1aXJlcyBhIHN0cmluZyBvciBhcnJheSBvZiB0b2tlbnMuJyk7XG4gIH1cbiAgLy8gYWxsb3cgcmFuZ2VzIGluIGFycmF5IFwibGl0ZXJhbHNcIj9cbiAgcGVybWl0QXJyYXlSYW5nZXMgPSBvcHRpb25zPy5wZXJtaXRBcnJheVJhbmdlcztcbiAgLy8gYWxsb3cgY2FsbHMgaW4gYXJyYXlzIFwibGl0ZXJhbHNcIj9cbiAgcGVybWl0QXJyYXlDYWxscyA9IG9wdGlvbnM/LnBlcm1pdEFycmF5Q2FsbHM7XG4gIC8vIGFsbG93IGFueSBmdW5jdGlvbiBjYWxsIGluIHJhbmdlIG9wZXJhdGlvbnM/XG4gIGxvb3NlUmVmQ2FsbHMgPSBvcHRpb25zPy5sb29zZVJlZkNhbGxzO1xuICAvLyBzZXQgaW5kZXggdG8gc3RhcnRcbiAgdG9rZW5JbmRleCA9IDA7XG4gIC8vIGRpc2NhcmQgcmVkdW5kYW50IHdoaXRlc3BhY2UgYW5kID0gcHJlZml4XG4gIHdoaWxlIChpc1doaXRlc3BhY2UodG9rZW5zW3Rva2VuSW5kZXhdKSB8fCBpc0Z4UHJlZml4KHRva2Vuc1t0b2tlbkluZGV4XSkpIHtcbiAgICB0b2tlbkluZGV4Kys7XG4gIH1cbiAgYWR2YW5jZSgpO1xuICB1bmlvblJlZnModHJ1ZSk7XG4gIGNvbnN0IHJvb3QgPSBleHByZXNzaW9uKDApO1xuICBhZHZhbmNlKEVORCk7XG4gIHJldHVybiByb290O1xufVxuIiwiaW1wb3J0IHtcbiAgRlhfUFJFRklYLFxuICBDT05URVhULFxuICBDT05URVhUX1FVT1RFLFxuICBSRUZfUkFOR0UsXG4gIFJFRl9URVJOQVJZLFxuICBSRUZfTkFNRUQsXG4gIFJFRl9CRUFNLFxuICBSRUZfU1RSVUNULFxuICBPUEVSQVRPUlxufSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBsZXhlcnNSZWZzIH0gZnJvbSAnLi9sZXhlcnMvc2V0cy5qcyc7XG5pbXBvcnQgeyBnZXRUb2tlbnMgfSBmcm9tICcuL2xleGVyLmpzJztcblxuLy8gTGliZXJhbGx5IHNwbGl0IGEgY29udGV4dCBzdHJpbmcgdXAgaW50byBwYXJ0cy5cbi8vIFBlcm1pdHMgYW55IGNvbWJpbmF0aW9uIG9mIGJyYWNlZCBhbmQgdW5icmFjZWQgaXRlbXMuXG5leHBvcnQgZnVuY3Rpb24gc3BsaXRQcmVmaXggKHN0ciwgc3RyaW5nc09ubHkgPSBmYWxzZSkge1xuICBsZXQgaW5CcmFjZSA9IGZhbHNlO1xuICBsZXQgY3VyclN0ciA9ICcnO1xuICBjb25zdCBwYXJ0cyA9IFtdO1xuICBjb25zdCBmbHVzaCA9ICgpID0+IHtcbiAgICBpZiAoY3VyclN0cikge1xuICAgICAgcGFydHMucHVzaChcbiAgICAgICAgc3RyaW5nc09ubHlcbiAgICAgICAgICA/IGN1cnJTdHJcbiAgICAgICAgICA6IHsgdmFsdWU6IGN1cnJTdHIsIGJyYWNlZDogaW5CcmFjZSB9XG4gICAgICApO1xuICAgIH1cbiAgICBjdXJyU3RyID0gJyc7XG4gIH07XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY2hhciA9IHN0cltpXTtcbiAgICBpZiAoY2hhciA9PT0gJ1snKSB7XG4gICAgICBmbHVzaCgpO1xuICAgICAgaW5CcmFjZSA9IHRydWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNoYXIgPT09ICddJykge1xuICAgICAgZmx1c2goKTtcbiAgICAgIGluQnJhY2UgPSBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjdXJyU3RyICs9IGNoYXI7XG4gICAgfVxuICB9XG4gIGZsdXNoKCk7XG4gIHJldHVybiBwYXJ0cztcbn1cblxuZnVuY3Rpb24gc3BsaXRDb250ZXh0IChjb250ZXh0U3RyaW5nKSB7XG4gIHJldHVybiB7IGNvbnRleHQ6IHNwbGl0UHJlZml4KGNvbnRleHRTdHJpbmcsIHRydWUpIH07XG59XG5cbmZ1bmN0aW9uIHNwbGl0Q29udGV4dFhsc3ggKGNvbnRleHRTdHJpbmcpIHtcbiAgY29uc3QgY29udGV4dCA9IHt9O1xuICBjb25zdCBjdHggPSBzcGxpdFByZWZpeChjb250ZXh0U3RyaW5nKTtcbiAgaWYgKGN0eC5sZW5ndGggPiAxKSB7XG4gICAgY29udGV4dC53b3JrYm9va05hbWUgPSBjdHhbY3R4Lmxlbmd0aCAtIDJdLnZhbHVlO1xuICAgIGNvbnRleHQuc2hlZXROYW1lID0gY3R4W2N0eC5sZW5ndGggLSAxXS52YWx1ZTtcbiAgfVxuICBlbHNlIGlmIChjdHgubGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3QgaXRlbSA9IGN0eFswXTtcbiAgICBpZiAoaXRlbS5icmFjZWQpIHtcbiAgICAgIGNvbnRleHQud29ya2Jvb2tOYW1lID0gaXRlbS52YWx1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjb250ZXh0LnNoZWV0TmFtZSA9IGl0ZW0udmFsdWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBjb250ZXh0O1xufVxuXG5jb25zdCB1bnF1b3RlID0gZCA9PiBkLnNsaWNlKDEsIC0xKS5yZXBsYWNlKC8nJy9nLCBcIidcIik7XG5cbmNvbnN0IHBSYW5nZU9wID0gdCA9PiB0ICYmICh0LnZhbHVlID09PSAnOicgfHwgdC52YWx1ZSA9PT0gJy46JyB8fCB0LnZhbHVlID09PSAnOi4nIHx8IHQudmFsdWUgPT09ICcuOi4nKSAmJiB7IG9wZXJhdG9yOiB0LnZhbHVlIH07XG5jb25zdCBwUmFuZ2UgPSB0ID0+IHQgJiYgdC50eXBlID09PSBSRUZfUkFOR0UgJiYgeyByMDogdC52YWx1ZSB9O1xuY29uc3QgcFBhcnRpYWwgPSB0ID0+IHQgJiYgdC50eXBlID09PSBSRUZfVEVSTkFSWSAmJiB7IHIwOiB0LnZhbHVlIH07XG5jb25zdCBwUmFuZ2UyID0gdCA9PiB0ICYmIHQudHlwZSA9PT0gUkVGX1JBTkdFICYmIHsgcjE6IHQudmFsdWUgfTtcbmNvbnN0IHBCYW5nID0gdCA9PiB0ICYmIHQudHlwZSA9PT0gT1BFUkFUT1IgJiYgdC52YWx1ZSA9PT0gJyEnICYmIHt9O1xuY29uc3QgcEJlYW0gPSB0ID0+IHQgJiYgdC50eXBlID09PSBSRUZfQkVBTSAmJiB7IHIwOiB0LnZhbHVlIH07XG5jb25zdCBwU3RydWN1cmVkID0gdCA9PiB0ICYmIHQudHlwZSA9PT0gUkVGX1NUUlVDVCAmJiB7IHN0cnVjdDogdC52YWx1ZSB9O1xuY29uc3QgcENvbnRleHQgPSAodCwgb3B0cykgPT4ge1xuICBjb25zdCBzcGxpdHRlciA9IG9wdHMueGxzeCA/IHNwbGl0Q29udGV4dFhsc3ggOiBzcGxpdENvbnRleHQ7XG4gIGlmICh0ICYmIHQudHlwZSA9PT0gQ09OVEVYVCkge1xuICAgIHJldHVybiBzcGxpdHRlcih0LnZhbHVlKTtcbiAgfVxuICBpZiAodCAmJiB0LnR5cGUgPT09IENPTlRFWFRfUVVPVEUpIHtcbiAgICByZXR1cm4gc3BsaXR0ZXIodW5xdW90ZSh0LnZhbHVlKSk7XG4gIH1cbn07XG5jb25zdCBwTmFtZWQgPSB0ID0+IHQgJiYgdC50eXBlID09PSBSRUZfTkFNRUQgJiYgeyBuYW1lOiB0LnZhbHVlIH07XG5cbmNvbnN0IHZhbGlkUnVucyA9IFtcbiAgWyBwUGFydGlhbCBdLFxuICBbIHBSYW5nZSwgcFJhbmdlT3AsIHBSYW5nZTIgXSxcbiAgWyBwUmFuZ2UgXSxcbiAgWyBwQmVhbSBdLFxuICBbIHBDb250ZXh0LCBwQmFuZywgcFBhcnRpYWwgXSxcbiAgWyBwQ29udGV4dCwgcEJhbmcsIHBSYW5nZSwgcFJhbmdlT3AsIHBSYW5nZTIgXSxcbiAgWyBwQ29udGV4dCwgcEJhbmcsIHBSYW5nZSBdLFxuICBbIHBDb250ZXh0LCBwQmFuZywgcEJlYW0gXVxuXTtcblxuY29uc3QgdmFsaWRSdW5zTmFtZWQgPSB2YWxpZFJ1bnMuY29uY2F0KFtcbiAgWyBwTmFtZWQgXSxcbiAgWyBwQ29udGV4dCwgcEJhbmcsIHBOYW1lZCBdLFxuICBbIHBTdHJ1Y3VyZWQgXSxcbiAgWyBwTmFtZWQsIHBTdHJ1Y3VyZWQgXSxcbiAgWyBwQ29udGV4dCwgcEJhbmcsIHBOYW1lZCwgcFN0cnVjdXJlZCBdXG5dKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmVmIChyZWYsIG9wdHMpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICB3aXRoTG9jYXRpb246IGZhbHNlLFxuICAgIG1lcmdlUmVmczogZmFsc2UsXG4gICAgYWxsb3dUZXJuYXJ5OiBmYWxzZSxcbiAgICBhbGxvd05hbWVkOiB0cnVlLFxuICAgIHIxYzE6IGZhbHNlLFxuICAgIHhsc3g6IGZhbHNlLFxuICAgIC4uLm9wdHNcbiAgfTtcbiAgY29uc3QgdG9rZW5zID0gZ2V0VG9rZW5zKHJlZiwgbGV4ZXJzUmVmcywgb3B0aW9ucyk7XG4gIGNvbnN0IHJlZkRhdGEgPSBvcHRpb25zLnhsc3hcbiAgICA/IHtcbiAgICAgIHdvcmtib29rTmFtZTogJycsXG4gICAgICBzaGVldE5hbWU6ICcnLFxuICAgICAgcjA6ICcnLFxuICAgICAgcjE6ICcnLFxuICAgICAgbmFtZTogJycsXG4gICAgICBvcGVyYXRvcjogJydcbiAgICB9XG4gICAgOiB7XG4gICAgICBjb250ZXh0OiBbXSxcbiAgICAgIHIwOiAnJyxcbiAgICAgIHIxOiAnJyxcbiAgICAgIG5hbWU6ICcnLFxuICAgICAgb3BlcmF0b3I6ICcnXG4gICAgfTtcbiAgLy8gZGlzY2FyZCB0aGUgXCI9XCItcHJlZml4IGlmIGl0IGlzIHRoZXJlXG4gIGlmICh0b2tlbnMubGVuZ3RoICYmIHRva2Vuc1swXS50eXBlID09PSBGWF9QUkVGSVgpIHtcbiAgICB0b2tlbnMuc2hpZnQoKTtcbiAgfVxuICBjb25zdCBydW5zID0gb3B0aW9ucy5hbGxvd05hbWVkID8gdmFsaWRSdW5zTmFtZWQgOiB2YWxpZFJ1bnM7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcnVucy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGRhdGEgPSB7IC4uLnJlZkRhdGEgfTtcbiAgICBpZiAocnVuc1tpXS5sZW5ndGggPT09IHRva2Vucy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHZhbGlkID0gcnVuc1tpXS5ldmVyeSgocGFyc2UsIGopID0+IHtcbiAgICAgICAgY29uc3QgZCA9IHBhcnNlKHRva2Vuc1tqXSwgb3B0aW9ucyk7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oZGF0YSwgZCk7XG4gICAgICAgIHJldHVybiBkO1xuICAgICAgfSk7XG4gICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsO1xufVxuIiwiY29uc3QgY2hhckZyb20gPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuXG4vKipcbiAqIENvbnZlcnQgYSAwIGJhc2VkIG9mZnNldCBudW1iZXIgdG8gYSBjb2x1bW4gc3RyaW5nXG4gKiByZXByZXNlbnRhdGlvbiAoYDJgID0gYFwiQ1wiYCkuXG4gKlxuICogVGhlIG1ldGhvZCBleHBlY3RzIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMTYzODMuIE90aGVyIGlucHV0IHdpbGxcbiAqIHJldHVybiBnYXJiYWdlLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5JbmRleCBaZXJvIGJhc2VkIGNvbHVtbiBpbmRleCBudW1iZXJcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb2x1bW4gc3RyaW5nIGlkZW50aWZpZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ29sIChjb2x1bW5JbmRleCkge1xuICByZXR1cm4gKFxuICAgIChjb2x1bW5JbmRleCA+PSA3MDJcbiAgICAgID8gY2hhckZyb20oKCgoKGNvbHVtbkluZGV4IC0gNzAyKSAvIDY3NikgLSAwKSAlIDI2KSArIDY1KVxuICAgICAgOiAnJykgK1xuICAgIChjb2x1bW5JbmRleCA+PSAyNlxuICAgICAgPyBjaGFyRnJvbSgoKCgoY29sdW1uSW5kZXggLyAyNikgLSAxKSAlIDI2KSArIDY1KSlcbiAgICAgIDogJycpICtcbiAgICBjaGFyRnJvbSgoY29sdW1uSW5kZXggJSAyNikgKyA2NSlcbiAgKTtcbn1cbiIsIi8qKlxuICogQ29udmVydCBhIGNvbHVtbiBzdHJpbmcgcmVwcmVzZW50YXRpb24gdG8gYSAwIGJhc2VkXG4gKiBvZmZzZXQgbnVtYmVyIChgXCJDXCJgID0gYDJgKS5cbiAqXG4gKiBUaGUgbWV0aG9kIGV4cGVjdHMgYSB2YWxpZCBjb2x1bW4gaWRlbnRpZmllciBtYWRlIHVwIG9mIF9vbmx5X1xuICogQS1aIGxldHRlcnMsIHdoaWNoIG1heSBiZSBlaXRoZXIgdXBwZXIgb3IgbG93ZXIgY2FzZS4gT3RoZXIgaW5wdXQgd2lsbFxuICogcmV0dXJuIGdhcmJhZ2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbHVtblN0cmluZyAgVGhlIGNvbHVtbiBzdHJpbmcgaWRlbnRpZmllclxuICogQHJldHVybnMge251bWJlcn0gIFplcm8gYmFzZWQgY29sdW1uIGluZGV4IG51bWJlclxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUNvbCAoY29sdW1uU3RyaW5nKSB7XG4gIGNvbnN0IHggPSAoY29sdW1uU3RyaW5nIHx8ICcnKTtcbiAgY29uc3QgbCA9IHgubGVuZ3RoO1xuICBsZXQgbiA9IDA7XG4gIGlmIChsID4gMikge1xuICAgIGNvbnN0IGMgPSB4LmNoYXJDb2RlQXQobCAtIDMpO1xuICAgIGNvbnN0IGEgPSBjID4gOTUgPyAzMiA6IDA7XG4gICAgbiArPSAoMSArIGMgLSBhIC0gNjUpICogNjc2O1xuICB9XG4gIGlmIChsID4gMSkge1xuICAgIGNvbnN0IGMgPSB4LmNoYXJDb2RlQXQobCAtIDIpO1xuICAgIGNvbnN0IGEgPSBjID4gOTUgPyAzMiA6IDA7XG4gICAgbiArPSAoMSArIGMgLSBhIC0gNjUpICogMjY7XG4gIH1cbiAgaWYgKGwpIHtcbiAgICBjb25zdCBjID0geC5jaGFyQ29kZUF0KGwgLSAxKTtcbiAgICBjb25zdCBhID0gYyA+IDk1ID8gMzIgOiAwO1xuICAgIG4gKz0gKGMgLSBhKSAtIDY1O1xuICB9XG4gIHJldHVybiBuO1xufVxuIiwiY29uc3QgcmVCYW5uZWRDaGFycyA9IC9bXjAtOUEtWmEtei5fwqHCpMKnwqjCqlxcdTAwYWTCry1cXHVmZmZmXS87XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlQcmVmaXggKHJlZikge1xuICBsZXQgcHJlID0gJyc7XG4gIGxldCBxdW90ZSA9IDA7XG4gIGxldCBudGggPSAwO1xuICBjb25zdCBjb250ZXh0ID0gcmVmLmNvbnRleHQgfHwgW107XG4gIGZvciAobGV0IGkgPSBjb250ZXh0Lmxlbmd0aDsgaSA+IC0xOyBpLS0pIHtcbiAgICBjb25zdCBzY29wZSA9IGNvbnRleHRbaV07XG4gICAgaWYgKHNjb3BlKSB7XG4gICAgICBjb25zdCBwYXJ0ID0gKG50aCAlIDIpID8gJ1snICsgc2NvcGUgKyAnXScgOiBzY29wZTtcbiAgICAgIHByZSA9IHBhcnQgKyBwcmU7XG4gICAgICBxdW90ZSArPSArcmVCYW5uZWRDaGFycy50ZXN0KHNjb3BlKTtcbiAgICAgIG50aCsrO1xuICAgIH1cbiAgfVxuICBpZiAocXVvdGUpIHtcbiAgICBwcmUgPSBcIidcIiArIHByZS5yZXBsYWNlKC8nL2csIFwiJydcIikgKyBcIidcIjtcbiAgfVxuICByZXR1cm4gcHJlID8gcHJlICsgJyEnIDogcHJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5UHJlZml4QWx0IChyZWYpIHtcbiAgbGV0IHByZSA9ICcnO1xuICBsZXQgcXVvdGUgPSAwO1xuICBjb25zdCB7IHdvcmtib29rTmFtZSwgc2hlZXROYW1lIH0gPSByZWY7XG4gIGlmICh3b3JrYm9va05hbWUpIHtcbiAgICBwcmUgKz0gJ1snICsgd29ya2Jvb2tOYW1lICsgJ10nO1xuICAgIHF1b3RlICs9ICtyZUJhbm5lZENoYXJzLnRlc3Qod29ya2Jvb2tOYW1lKTtcbiAgfVxuICBpZiAoc2hlZXROYW1lKSB7XG4gICAgcHJlICs9IHNoZWV0TmFtZTtcbiAgICBxdW90ZSArPSArcmVCYW5uZWRDaGFycy50ZXN0KHNoZWV0TmFtZSk7XG4gIH1cbiAgaWYgKHF1b3RlKSB7XG4gICAgcHJlID0gXCInXCIgKyBwcmUucmVwbGFjZSgvJy9nLCBcIicnXCIpICsgXCInXCI7XG4gIH1cbiAgcmV0dXJuIHByZSA/IHByZSArICchJyA6IHByZTtcbn1cbiIsImltcG9ydCB7IE1BWF9ST1dTLCBNQVhfQ09MUyB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IHBhcnNlUmVmIH0gZnJvbSAnLi9wYXJzZVJlZi5qcyc7XG5pbXBvcnQgeyB0b0NvbCB9IGZyb20gJy4vdG9Db2wuanMnO1xuaW1wb3J0IHsgZnJvbUNvbCB9IGZyb20gJy4vZnJvbUNvbC5qcyc7XG5pbXBvcnQgeyBzdHJpbmdpZnlQcmVmaXgsIHN0cmluZ2lmeVByZWZpeEFsdCB9IGZyb20gJy4vc3RyaW5naWZ5UHJlZml4LmpzJztcblxuY29uc3QgY2xhbXAgPSAobWluLCB2YWwsIG1heCkgPT4gTWF0aC5taW4oTWF0aC5tYXgodmFsLCBtaW4pLCBtYXgpO1xuY29uc3QgdG9Db2xTdHIgPSAoYywgYSkgPT4gKGEgPyAnJCcgOiAnJykgKyB0b0NvbChjKTtcbmNvbnN0IHRvUm93U3RyID0gKHIsIGEpID0+IChhID8gJyQnIDogJycpICsgdG9Sb3cocik7XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm93IChyb3dTdHIpIHtcbiAgcmV0dXJuICtyb3dTdHIgLSAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9Sb3cgKHRvcCkge1xuICByZXR1cm4gU3RyaW5nKHRvcCArIDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9SZWxhdGl2ZSAocmFuZ2UpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHJhbmdlLCB7ICRsZWZ0OiBmYWxzZSwgJHJpZ2h0OiBmYWxzZSwgJHRvcDogZmFsc2UsICRib3R0b206IGZhbHNlIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9BYnNvbHV0ZSAocmFuZ2UpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHJhbmdlLCB7ICRsZWZ0OiB0cnVlLCAkcmlnaHQ6IHRydWUsICR0b3A6IHRydWUsICRib3R0b206IHRydWUgfSk7XG59XG5cbi8qKlxuICogQGlnbm9yZVxuICogQHBhcmFtIHsnaGVhZCcgfCAndGFpbCcgfCAnYm90aCcgfCBudWxsIHwgdW5kZWZpbmVkfSB0cmltIERvZXMgdGhlIHJhbmdlIGhhdmUgdHJpbW1pbmc/XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYXBwcm9wcmlhdGUgcmFuZ2Ugam9pbiBvcGVyYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gcmFuZ2VPcGVyYXRvciAodHJpbSkge1xuICBpZiAodHJpbSA9PT0gJ2JvdGgnKSB7XG4gICAgcmV0dXJuICcuOi4nO1xuICB9XG4gIGVsc2UgaWYgKHRyaW0gPT09ICdoZWFkJykge1xuICAgIHJldHVybiAnLjonO1xuICB9XG4gIGVsc2UgaWYgKHRyaW0gPT09ICd0YWlsJykge1xuICAgIHJldHVybiAnOi4nO1xuICB9XG4gIHJldHVybiAnOic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmltRGlyZWN0aW9uIChoZWFkLCB0YWlsKSB7XG4gIGlmIChoZWFkICYmIHRhaWwpIHtcbiAgICByZXR1cm4gJ2JvdGgnO1xuICB9XG4gIGlmIChoZWFkKSB7XG4gICAgcmV0dXJuICdoZWFkJztcbiAgfVxuICBpZiAodGFpbCkge1xuICAgIHJldHVybiAndGFpbCc7XG4gIH1cbn1cblxuLyoqXG4gKiBTdHJpbmdpZnkgYSByYW5nZSBvYmplY3QgaW50byBBMSBzeW50YXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBpZ25vcmVcbiAqIEBzZWUgcGFyc2VBMVJlZlxuICogQHBhcmFtIHtSYW5nZUExfSByYW5nZSAgQSByYW5nZSBvYmplY3RcbiAqIEByZXR1cm5zIHtzdHJpbmd9ICBBbiBBMS1zdHlsZSBzdHJpbmcgcmVwcmVzZW5hdGlvbiBvZiBhIHJhbmdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0ExIChyYW5nZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gIGxldCB7IHRvcCwgbGVmdCwgYm90dG9tLCByaWdodCwgdHJpbSB9ID0gcmFuZ2U7XG4gIGNvbnN0IHsgJGxlZnQsICRyaWdodCwgJHRvcCwgJGJvdHRvbSB9ID0gcmFuZ2U7XG4gIGNvbnN0IG5vTGVmdCA9IGxlZnQgPT0gbnVsbDtcbiAgY29uc3Qgbm9SaWdodCA9IHJpZ2h0ID09IG51bGw7XG4gIGNvbnN0IG5vVG9wID0gdG9wID09IG51bGw7XG4gIGNvbnN0IG5vQm90dG9tID0gYm90dG9tID09IG51bGw7XG4gIC8vIGFsbG93IHNraXBwaW5nIHJpZ2h0IGFuZCBib3R0b20gdG8gZGVmaW5lIGEgY2VsbFxuICB0b3AgPSBjbGFtcCgwLCB0b3AgfCAwLCBNQVhfUk9XUyk7XG4gIGxlZnQgPSBjbGFtcCgwLCBsZWZ0IHwgMCwgTUFYX0NPTFMpO1xuICBpZiAoIW5vTGVmdCAmJiAhbm9Ub3AgJiYgbm9SaWdodCAmJiBub0JvdHRvbSkge1xuICAgIGJvdHRvbSA9IHRvcDtcbiAgICByaWdodCA9IGxlZnQ7XG4gIH1cbiAgZWxzZSB7XG4gICAgYm90dG9tID0gY2xhbXAoMCwgYm90dG9tIHwgMCwgTUFYX1JPV1MpO1xuICAgIHJpZ2h0ID0gY2xhbXAoMCwgcmlnaHQgfCAwLCBNQVhfQ09MUyk7XG4gIH1cbiAgY29uc3Qgb3AgPSByYW5nZU9wZXJhdG9yKHRyaW0pO1xuICAvLyBBOkFcbiAgY29uc3QgYWxsUm93cyA9IHRvcCA9PT0gMCAmJiBib3R0b20gPj0gTUFYX1JPV1M7XG4gIGNvbnN0IGhhdmVBYnNDb2wgPSAoJGxlZnQgJiYgIW5vTGVmdCkgfHwgKCRyaWdodCAmJiAhbm9SaWdodCk7XG4gIGlmICgoYWxsUm93cyAmJiAhbm9MZWZ0ICYmICFub1JpZ2h0ICYmICghaGF2ZUFic0NvbCB8fCBsZWZ0ID09PSByaWdodCkpIHx8IChub1RvcCAmJiBub0JvdHRvbSkpIHtcbiAgICByZXR1cm4gdG9Db2xTdHIobGVmdCwgJGxlZnQpICsgb3AgKyB0b0NvbFN0cihyaWdodCwgJHJpZ2h0KTtcbiAgfVxuICAvLyAxOjFcbiAgY29uc3QgYWxsQ29scyA9IGxlZnQgPT09IDAgJiYgcmlnaHQgPj0gTUFYX0NPTFM7XG4gIGNvbnN0IGhhdmVBYnNSb3cgPSAoJHRvcCAmJiAhbm9Ub3ApIHx8ICgkYm90dG9tICYmICFub0JvdHRvbSk7XG4gIGlmICgoYWxsQ29scyAmJiAhbm9Ub3AgJiYgIW5vQm90dG9tICYmICghaGF2ZUFic1JvdyB8fCB0b3AgPT09IGJvdHRvbSkpIHx8IChub0xlZnQgJiYgbm9SaWdodCkpIHtcbiAgICByZXR1cm4gdG9Sb3dTdHIodG9wLCAkdG9wKSArIG9wICsgdG9Sb3dTdHIoYm90dG9tLCAkYm90dG9tKTtcbiAgfVxuICAvLyBBMToxXG4gIGlmICghbm9MZWZ0ICYmICFub1RvcCAmJiAhbm9SaWdodCAmJiBub0JvdHRvbSkge1xuICAgIHJldHVybiB0b0NvbFN0cihsZWZ0LCAkbGVmdCkgKyB0b1Jvd1N0cih0b3AsICR0b3ApICsgb3AgKyB0b0NvbFN0cihyaWdodCwgJHJpZ2h0KTtcbiAgfVxuICAvLyBBOkExID0+IEExOjFcbiAgaWYgKCFub0xlZnQgJiYgbm9Ub3AgJiYgIW5vUmlnaHQgJiYgIW5vQm90dG9tKSB7XG4gICAgcmV0dXJuIHRvQ29sU3RyKGxlZnQsICRsZWZ0KSArIHRvUm93U3RyKGJvdHRvbSwgJGJvdHRvbSkgKyBvcCArIHRvQ29sU3RyKHJpZ2h0LCAkcmlnaHQpO1xuICB9XG4gIC8vIEExOkFcbiAgaWYgKCFub0xlZnQgJiYgIW5vVG9wICYmIG5vUmlnaHQgJiYgIW5vQm90dG9tKSB7XG4gICAgcmV0dXJuIHRvQ29sU3RyKGxlZnQsICRsZWZ0KSArIHRvUm93U3RyKHRvcCwgJHRvcCkgKyBvcCArIHRvUm93U3RyKGJvdHRvbSwgJGJvdHRvbSk7XG4gIH1cbiAgLy8gQTpBMSA9PiBBMTpBXG4gIGlmIChub0xlZnQgJiYgIW5vVG9wICYmICFub1JpZ2h0ICYmICFub0JvdHRvbSkge1xuICAgIHJldHVybiB0b0NvbFN0cihyaWdodCwgJHJpZ2h0KSArIHRvUm93U3RyKHRvcCwgJHRvcCkgKyBvcCArIHRvUm93U3RyKGJvdHRvbSwgJGJvdHRvbSk7XG4gIH1cbiAgLy8gQTE6QTFcbiAgaWYgKHJpZ2h0ICE9PSBsZWZ0IHx8IGJvdHRvbSAhPT0gdG9wIHx8ICRyaWdodCAhPT0gJGxlZnQgfHwgJGJvdHRvbSAhPT0gJHRvcCkge1xuICAgIHJldHVybiB0b0NvbFN0cihsZWZ0LCAkbGVmdCkgKyB0b1Jvd1N0cih0b3AsICR0b3ApICsgb3AgK1xuICAgICAgICAgICB0b0NvbFN0cihyaWdodCwgJHJpZ2h0KSArIHRvUm93U3RyKGJvdHRvbSwgJGJvdHRvbSk7XG4gIH1cbiAgLy8gQTFcbiAgcmV0dXJuIHRvQ29sU3RyKGxlZnQsICRsZWZ0KSArIHRvUm93U3RyKHRvcCwgJHRvcCk7XG59XG5cbmZ1bmN0aW9uIHNwbGl0QTEgKHN0cikge1xuICBjb25zdCBtID0gL14oPz0uKShcXCQoPz1cXEQpKT8oW0EtWmEtel17MCwzfSk/KFxcJCk/KFsxLTldWzAtOV17MCw2fSk/JC8uZXhlYyhzdHIpO1xuICBpZiAoIW0gfHwgKCFtWzJdICYmICFtWzRdKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBbXG4gICAgbVs0XSA/IGZyb21Sb3cobVs0XSkgOiBudWxsLCAvLyByb3cgaW5kZXggb3IgbnVsbFxuICAgIG1bMl0gPyBmcm9tQ29sKG1bMl0pIDogbnVsbCwgLy8gY29sIGluZGV4IG9yIG51bGxcbiAgICAhIW1bM10sIC8vIGlzIHJvdyBhYnNvbHV0ZT9cbiAgICAhIW1bMV0gIC8vIGlzIGNvbCBhYnNvbHV0ZT9cbiAgXTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHNpbXBsZSBzdHJpbmcgcmVmZXJlbmNlIHRvIGFuIEExIHJhbmdlIGludG8gYSByYW5nZSBvYmplY3QuXG4gKiBXaWxsIGFjY2VwdCBgQTFgLCBgQTJgLCBgQTpBYCwgb3IgYDE6MWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBpZ25vcmVcbiAqIEBzZWUgcGFyc2VBMVJlZlxuICogQHBhcmFtIHtzdHJpbmd9IHJhbmdlU3RyaW5nICBBIHJhbmdlIHN0cmluZ1xuICogQHJldHVybnMgeyhSYW5nZUExfG51bGwpfSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgdmFsaWQgcmFuZ2Ugb3IgbnVsbCBpZiBpdCBpcyBpbnZhbGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUExIChyYW5nZVN0cmluZykge1xuICBsZXQgdG9wID0gbnVsbDtcbiAgbGV0IGxlZnQgPSBudWxsO1xuICBsZXQgYm90dG9tID0gbnVsbDtcbiAgbGV0IHJpZ2h0ID0gbnVsbDtcbiAgbGV0ICR0b3AgPSBmYWxzZTtcbiAgbGV0ICRsZWZ0ID0gZmFsc2U7XG4gIGxldCAkYm90dG9tID0gZmFsc2U7XG4gIGxldCAkcmlnaHQgPSBmYWxzZTtcbiAgY29uc3QgWyBwYXJ0MSwgb3AxLCBwYXJ0Miwgb3AyLCBwYXJ0MyBdID0gcmFuZ2VTdHJpbmcuc3BsaXQoLyhcXC4/OlxcLj8pLyk7XG4gIGlmIChvcDIgfHwgcGFydDMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB0cmltID0gdHJpbURpcmVjdGlvbighIW9wMSAmJiBvcDFbMF0gPT09ICcuJywgISFvcDEgJiYgb3AxW29wMS5sZW5ndGggLSAxXSA9PT0gJy4nKTtcbiAgY29uc3QgcDEgPSBzcGxpdEExKHBhcnQxKTtcbiAgY29uc3QgcDIgPSBwYXJ0MiA/IHNwbGl0QTEocGFydDIpIDogbnVsbDtcbiAgaWYgKCFwMSB8fCAocGFydDIgJiYgIXAyKSkge1xuICAgIC8vIGludmFsaWQgc2VjdGlvblxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIHBhcnQgMSBiaXRzXG4gIGlmIChwMVswXSAhPSBudWxsICYmIHAxWzFdICE9IG51bGwpIHtcbiAgICBbIHRvcCwgbGVmdCwgJHRvcCwgJGxlZnQgXSA9IHAxO1xuICB9XG4gIGVsc2UgaWYgKHAxWzBdID09IG51bGwgJiYgcDFbMV0gIT0gbnVsbCkge1xuICAgIFsgLCBsZWZ0LCAsICRsZWZ0IF0gPSBwMTtcbiAgfVxuICBlbHNlIGlmIChwMVswXSAhPSBudWxsICYmIHAxWzFdID09IG51bGwpIHtcbiAgICBbIHRvcCwgLCAkdG9wIF0gPSBwMTtcbiAgfVxuICAvLyBwYXJ0IDIgYml0c1xuICBpZiAoIXBhcnQyKSB7XG4gICAgLy8gcGFydCAyIG11c3QgZXhpc3QgaWYgZWl0aGVyIHRvcCBvciBsZWZ0IGlzIG51bGw6XG4gICAgLy8gdGhpcyBkaXNhbGxvd3MgYSBzaW5nbGUgbnVtIG9yIGNvbCBwYXR0ZXJuc1xuICAgIGlmICh0b3AgPT0gbnVsbCB8fCBsZWZ0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBib3R0b20gPSB0b3A7XG4gICAgcmlnaHQgPSBsZWZ0O1xuICAgICRib3R0b20gPSAkdG9wO1xuICAgICRyaWdodCA9ICRsZWZ0O1xuICB9XG4gIGVsc2UgaWYgKHAyWzBdICE9IG51bGwgJiYgcDJbMV0gIT0gbnVsbCkge1xuICAgIFsgYm90dG9tLCByaWdodCwgJGJvdHRvbSwgJHJpZ2h0IF0gPSBwMjtcbiAgfVxuICBlbHNlIGlmIChwMlswXSA9PSBudWxsICYmIHAyWzFdICE9IG51bGwpIHtcbiAgICBbICwgcmlnaHQsICwgJHJpZ2h0IF0gPSBwMjtcbiAgfVxuICBlbHNlIGlmIChwMlswXSAhPSBudWxsICYmIHAyWzFdID09IG51bGwpIHtcbiAgICBbIGJvdHRvbSwgLCAkYm90dG9tIF0gPSBwMjtcbiAgfVxuICAvLyBmbGlwIGxlZnQvcmlnaHQgYW5kIHRvcC9ib3R0b20gYXMgbmVlZGVkXG4gIC8vIGZvciBwYXJ0aWFsIHJhbmdlcyB3ZSBwZXJmZXIgdGhlIGNvb3JkIG9uIHRoZSBsZWZ0LXNpZGUgb2YgdGhlIDpcbiAgaWYgKHJpZ2h0ICE9IG51bGwgJiYgKGxlZnQgPT0gbnVsbCB8fCAobGVmdCAhPSBudWxsICYmIHJpZ2h0IDwgbGVmdCkpKSB7XG4gICAgWyBsZWZ0LCByaWdodCwgJGxlZnQsICRyaWdodCBdID0gWyByaWdodCwgbGVmdCwgJHJpZ2h0LCAkbGVmdCBdO1xuICB9XG4gIGlmIChib3R0b20gIT0gbnVsbCAmJiAodG9wID09IG51bGwgfHwgKHRvcCAhPSBudWxsICYmIGJvdHRvbSA8IHRvcCkpKSB7XG4gICAgWyB0b3AsIGJvdHRvbSwgJHRvcCwgJGJvdHRvbSBdID0gWyBib3R0b20sIHRvcCwgJGJvdHRvbSwgJHRvcCBdO1xuICB9XG4gIGNvbnN0IHIgPSB7IHRvcCwgbGVmdCwgYm90dG9tLCByaWdodCwgJHRvcCwgJGxlZnQsICRib3R0b20sICRyaWdodCB9O1xuICBpZiAodHJpbSkgeyByLnRyaW0gPSB0cmltOyB9XG4gIHJldHVybiByO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgc3RyaW5nIHJlZmVyZW5jZSBpbnRvIGFuIG9iamVjdCByZXByZXNlbnRpbmcgaXQuXG4gKlxuICogYGBganNcbiAqIHBhcnNlQTFSZWYoJ1NoZWV0MSFBJDE6JEIyJyk7XG4gKiAvLyA9PiB7XG4gKiAvLyAgIGNvbnRleHQ6IFsgJ1NoZWV0MScgXSxcbiAqIC8vICAgcmFuZ2U6IHtcbiAqIC8vICAgICB0b3A6IDAsXG4gKiAvLyAgICAgbGVmdDogMCxcbiAqIC8vICAgICBib3R0b206IDEsXG4gKiAvLyAgICAgcmlnaHQ6IDFcbiAqIC8vICAgICAkdG9wOiB0cnVlLFxuICogLy8gICAgICRsZWZ0OiBmYWxzZSxcbiAqIC8vICAgICAkYm90dG9tOiBmYWxzZSxcbiAqIC8vICAgICAkcmlnaHQ6IHRydWVcbiAqIC8vICAgfVxuICogLy8gfVxuICogYGBgXG4gKlxuICogRm9yIEE6QSBvciBBMTpBIHN0eWxlIHJhbmdlcywgYG51bGxgIHdpbGwgYmUgdXNlZCBmb3IgYW55IGRpbWVuc2lvbnMgdGhhdCB0aGVcbiAqIHN5bnRheCBkb2VzIG5vdCBzcGVjaWZ5OlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWZTdHJpbmcgIEFuIEExLXN0eWxlIHJlZmVyZW5jZSBzdHJpbmdcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gIE9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYWxsb3dOYW1lZD10cnVlXSAgRW5hYmxlIHBhcnNpbmcgbmFtZXMgYXMgd2VsbCBhcyByYW5nZXMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93VGVybmFyeT1mYWxzZV0gIEVuYWJsZXMgdGhlIHJlY29nbml0aW9uIG9mIHRlcm5hcnkgcmFuZ2VzIGluIHRoZSBzdHlsZSBvZiBgQTE6QWAgb3IgYEExOjFgLiBUaGVzZSBhcmUgc3VwcG9ydGVkIGJ5IEdvb2dsZSBTaGVldHMgYnV0IG5vdCBFeGNlbC4gU2VlOiBSZWZlcmVuY2VzLm1kLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy54bHN4PWZhbHNlXSAgU3dpdGNoZXMgdG8gdGhlIGBbMV1TaGVldDEhQTFgIG9yIGBbMV0hbmFtZWAgcHJlZml4IHN5bnRheCBmb3JtIGZvciBleHRlcm5hbCB3b3JrYm9va3MuIFNlZTogW1ByZWZpeGVzLm1kXSguL1ByZWZpeGVzLm1kKVxuICogQHJldHVybnMgeyhSZWZlcmVuY2VBMXxudWxsKX0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIHZhbGlkIHJlZmVyZW5jZSBvciBudWxsIGlmIGl0IGlzIGludmFsaWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUExUmVmIChyZWZTdHJpbmcsIHsgYWxsb3dOYW1lZCA9IHRydWUsIGFsbG93VGVybmFyeSA9IGZhbHNlLCB4bHN4ID0gZmFsc2UgfSA9IHt9KSB7XG4gIGNvbnN0IGQgPSBwYXJzZVJlZihyZWZTdHJpbmcsIHsgYWxsb3dOYW1lZCwgYWxsb3dUZXJuYXJ5LCB4bHN4LCByMWMxOiBmYWxzZSB9KTtcbiAgaWYgKGQgJiYgKGQucjAgfHwgZC5uYW1lKSkge1xuICAgIGxldCByYW5nZSA9IG51bGw7XG4gICAgaWYgKGQucjApIHtcbiAgICAgIHJhbmdlID0gZnJvbUExKGQucjEgPyBkLnIwICsgZC5vcGVyYXRvciArIGQucjEgOiBkLnIwKTtcbiAgICB9XG4gICAgaWYgKHJhbmdlKSB7XG4gICAgICByZXR1cm4geGxzeFxuICAgICAgICA/IHsgd29ya2Jvb2tOYW1lOiBkLndvcmtib29rTmFtZSwgc2hlZXROYW1lOiBkLnNoZWV0TmFtZSwgcmFuZ2UgfVxuICAgICAgICA6IHsgY29udGV4dDogZC5jb250ZXh0LCByYW5nZSB9O1xuICAgIH1cbiAgICBpZiAoZC5uYW1lKSB7XG4gICAgICByZXR1cm4geGxzeFxuICAgICAgICA/IHsgd29ya2Jvb2tOYW1lOiBkLndvcmtib29rTmFtZSwgc2hlZXROYW1lOiBkLnNoZWV0TmFtZSwgbmFtZTogZC5uYW1lIH1cbiAgICAgICAgOiB7IGNvbnRleHQ6IGQuY29udGV4dCwgbmFtZTogZC5uYW1lIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEdldCBhbiBBMS1zdHlsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSByZWZlcmVuY2Ugb2JqZWN0LlxuICpcbiAqIGBgYGpzXG4gKiBzdHJpbmdpZnlBMVJlZih7XG4gKiAgIGNvbnRleHQ6IFsgJ1NoZWV0MScgXSxcbiAqICAgcmFuZ2U6IHtcbiAqICAgICB0b3A6IDAsXG4gKiAgICAgbGVmdDogMCxcbiAqICAgICBib3R0b206IDEsXG4gKiAgICAgcmlnaHQ6IDEsXG4gKiAgICAgJHRvcDogdHJ1ZSxcbiAqICAgICAkbGVmdDogZmFsc2UsXG4gKiAgICAgJGJvdHRvbTogZmFsc2UsXG4gKiAgICAgJHJpZ2h0OiB0cnVlXG4gKiAgIH1cbiAqIH0pO1xuICogLy8gPT4gJ1NoZWV0MSFBJDE6JEIyJ1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtSZWZlcmVuY2VBMX0gcmVmT2JqZWN0IEEgcmVmZXJlbmNlIG9iamVjdFxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zPXt9XSAgT3B0aW9uc1xuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy54bHN4PWZhbHNlXSAgU3dpdGNoZXMgdG8gdGhlIGBbMV1TaGVldDEhQTFgIG9yIGBbMV0hbmFtZWAgcHJlZml4IHN5bnRheCBmb3JtIGZvciBleHRlcm5hbCB3b3JrYm9va3MuIFNlZTogW1ByZWZpeGVzLm1kXSguL1ByZWZpeGVzLm1kKVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHJlZmVyZW5jZSBpbiBBMS1zdHlsZSBzdHJpbmcgZm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlBMVJlZiAocmVmT2JqZWN0LCB7IHhsc3ggPSBmYWxzZSB9ID0ge30pIHtcbiAgY29uc3QgcHJlZml4ID0geGxzeFxuICAgID8gc3RyaW5naWZ5UHJlZml4QWx0KHJlZk9iamVjdClcbiAgICA6IHN0cmluZ2lmeVByZWZpeChyZWZPYmplY3QpO1xuICByZXR1cm4gcHJlZml4ICsgKFxuICAgIHJlZk9iamVjdC5uYW1lID8gcmVmT2JqZWN0Lm5hbWUgOiB0b0ExKHJlZk9iamVjdC5yYW5nZSlcbiAgKTtcbn1cblxuLyoqXG4gKiBGaWxsIHRoZSBhbnkgbWlzc2luZyBib3VuZHMgaW4gcmFuZ2Ugb2JqZWN0cy4gVG9wIHdpbGwgYmUgc2V0IHRvIDAsIGJvdHRvbSB0b1xuICogMTA0ODU3NSwgbGVmdCB0byAwLCBhbmQgcmlnaHQgdG8gMTYzODMsIGlmIHRoZXkgYXJlIGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAqXG4gKiBgYGBqc1xuICogYWRkQTFSYW5nZUJvdW5kcyh7XG4gKiAgIGNvbnRleHQ6IFsgJ1NoZWV0MScgXSxcbiAqICAgcmFuZ2U6IHtcbiAqICAgICB0b3A6IDAsXG4gKiAgICAgbGVmdDogMCxcbiAqICAgICBib3R0b206IDEsXG4gKiAgICAgJHRvcDogdHJ1ZSxcbiAqICAgICAkbGVmdDogZmFsc2UsXG4gKiAgICAgJGJvdHRvbTogZmFsc2UsXG4gKiAgIH1cbiAqIH0pO1xuICogLy8gPT4ge1xuICogLy8gICBjb250ZXh0OiBbICdTaGVldDEnIF0sXG4gKiAvLyAgIHJhbmdlOiB7XG4gKiAvLyAgICAgdG9wOiAwLFxuICogLy8gICAgIGxlZnQ6IDAsXG4gKiAvLyAgICAgYm90dG9tOiAxLFxuICogLy8gICAgIHJpZ2h0OiAxNjM4MyxcbiAqIC8vICAgICAkdG9wOiB0cnVlLFxuICogLy8gICAgICRsZWZ0OiBmYWxzZSxcbiAqIC8vICAgICAkYm90dG9tOiBmYWxzZSxcbiAqIC8vICAgICAkcmlnaHQ6IGZhbHNlXG4gKiAvLyAgIH1cbiAqIC8vIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7UmFuZ2VBMX0gcmFuZ2UgVGhlIHJhbmdlIHBhcnQgb2YgYSByZWZlcmVuY2Ugb2JqZWN0LlxuICogQHJldHVybnMge1JhbmdlQTF9IHNhbWUgcmFuZ2Ugd2l0aCBtaXNzaW5nIGJvdW5kcyBmaWxsZWQgaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRBMVJhbmdlQm91bmRzIChyYW5nZSkge1xuICBpZiAocmFuZ2UudG9wID09IG51bGwpIHtcbiAgICByYW5nZS50b3AgPSAwO1xuICAgIHJhbmdlLiR0b3AgPSBmYWxzZTtcbiAgfVxuICBpZiAocmFuZ2UuYm90dG9tID09IG51bGwpIHtcbiAgICByYW5nZS5ib3R0b20gPSBNQVhfUk9XUztcbiAgICByYW5nZS4kYm90dG9tID0gZmFsc2U7XG4gIH1cbiAgaWYgKHJhbmdlLmxlZnQgPT0gbnVsbCkge1xuICAgIHJhbmdlLmxlZnQgPSAwO1xuICAgIHJhbmdlLiRsZWZ0ID0gZmFsc2U7XG4gIH1cbiAgaWYgKHJhbmdlLnJpZ2h0ID09IG51bGwpIHtcbiAgICByYW5nZS5yaWdodCA9IE1BWF9DT0xTO1xuICAgIHJhbmdlLiRyaWdodCA9IGZhbHNlO1xuICB9XG4gIHJldHVybiByYW5nZTtcbn1cbiIsImltcG9ydCB7IHBhcnNlUmVmIH0gZnJvbSAnLi9wYXJzZVJlZi5qcyc7XG5pbXBvcnQgeyBwYXJzZVNSYW5nZSB9IGZyb20gJy4vcGFyc2VTUmFuZ2UuanMnO1xuXG4vKipcbiAqIFBhcnNlIGEgc3RydWN0dXJlZCByZWZlcmVuY2Ugc3RyaW5nIGludG8gYW4gb2JqZWN0IHJlcHJlc2VudGluZyBpdC5cbiAqXG4gKiBgYGBqc1xuICogcGFyc2VTdHJ1Y3RSZWYoJ3dvcmtib29rLnhsc3ghdGFibGVOYW1lW1sjRGF0YV0sW0NvbHVtbjFdOltDb2x1bW4yXV0nKTtcbiAqIC8vID0+IHtcbiAqIC8vICAgY29udGV4dDogWyAnd29ya2Jvb2sueGxzeCcgXSxcbiAqIC8vICAgc2VjdGlvbnM6IFsgJ2RhdGEnIF0sXG4gKiAvLyAgIGNvbHVtbnM6IFsgJ215IGNvbHVtbicsICdAZm9vJyBdLFxuICogLy8gICB0YWJsZTogJ3RhYmxlTmFtZScsXG4gKiAvLyB9XG4gKiBgYGBcbiAqXG4gKiBGb3IgQTpBIG9yIEExOkEgc3R5bGUgcmFuZ2VzLCBgbnVsbGAgd2lsbCBiZSB1c2VkIGZvciBhbnkgZGltZW5zaW9ucyB0aGF0IHRoZVxuICogc3ludGF4IGRvZXMgbm90IHNwZWNpZnk6XG4gKlxuICogQHR1dG9yaWFsIFJlZmVyZW5jZXMubWRcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWYgIEEgc3RydWN0dXJlZCByZWZlcmVuY2Ugc3RyaW5nXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dICBPcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnhsc3g9ZmFsc2VdICBTd2l0Y2hlcyB0byB0aGUgYFsxXVNoZWV0MSFBMWAgb3IgYFsxXSFuYW1lYCBwcmVmaXggc3ludGF4IGZvcm0gZm9yIGV4dGVybmFsIHdvcmtib29rcy4gU2VlOiBbUHJlZml4ZXMubWRdKC4vUHJlZml4ZXMubWQpXG4gKiBAcmV0dXJucyB7KFJlZmVyZW5jZVN0cnVjdHxudWxsKX0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIHZhbGlkIHJlZmVyZW5jZSBvciBudWxsIGlmIGl0IGlzIGludmFsaWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cnVjdFJlZiAocmVmLCBvcHRpb25zID0geyB4bHN4OiBmYWxzZSB9KSB7XG4gIGNvbnN0IHIgPSBwYXJzZVJlZihyZWYsIG9wdGlvbnMpO1xuICBpZiAociAmJiByLnN0cnVjdCkge1xuICAgIGNvbnN0IHN0cnVjdERhdGEgPSBwYXJzZVNSYW5nZShyLnN0cnVjdCk7XG4gICAgaWYgKHN0cnVjdERhdGEgJiYgc3RydWN0RGF0YS5sZW5ndGggPT09IHIuc3RydWN0Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMueGxzeFxuICAgICAgICA/IHtcbiAgICAgICAgICB3b3JrYm9va05hbWU6IHIud29ya2Jvb2tOYW1lLFxuICAgICAgICAgIHNoZWV0TmFtZTogci5zaGVldE5hbWUsXG4gICAgICAgICAgdGFibGU6IHIubmFtZSxcbiAgICAgICAgICBjb2x1bW5zOiBzdHJ1Y3REYXRhLmNvbHVtbnMsXG4gICAgICAgICAgc2VjdGlvbnM6IHN0cnVjdERhdGEuc2VjdGlvbnNcbiAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICBjb250ZXh0OiByLmNvbnRleHQsXG4gICAgICAgICAgdGFibGU6IHIubmFtZSxcbiAgICAgICAgICBjb2x1bW5zOiBzdHJ1Y3REYXRhLmNvbHVtbnMsXG4gICAgICAgICAgc2VjdGlvbnM6IHN0cnVjdERhdGEuc2VjdGlvbnNcbiAgICAgICAgfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iLCJpbXBvcnQgeyBSRUZfUkFOR0UsIFJFRl9CRUFNLCBSRUZfVEVSTkFSWSwgVU5LTk9XTiwgUkVGX1NUUlVDVCB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IHBhcnNlQTFSZWYgfSBmcm9tICcuL2ExLmpzJztcbmltcG9ydCB7IHBhcnNlU3RydWN0UmVmIH0gZnJvbSAnLi9wYXJzZVN0cnVjdFJlZi5qcyc7XG5cbmZ1bmN0aW9uIGdldElEZXIgKCkge1xuICBsZXQgaSA9IDE7XG4gIHJldHVybiAoKSA9PiAnZnhnJyArIChpKyspO1xufVxuXG5mdW5jdGlvbiBzYW1lVmFsdWUgKGEsIGIpIHtcbiAgaWYgKGEgPT0gbnVsbCAmJiBiID09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gYSA9PT0gYjtcbn1cblxuZnVuY3Rpb24gc2FtZUFycmF5IChhLCBiKSB7XG4gIGlmICgoQXJyYXkuaXNBcnJheShhKSAhPT0gQXJyYXkuaXNBcnJheShiKSkgfHwgYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIGlmICghc2FtZVZhbHVlKGFbaV0sIGJbaV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzYW1lU3RyIChhLCBiKSB7XG4gIGlmICghYSAmJiAhYikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBTdHJpbmcoYSkudG9Mb3dlckNhc2UoKSA9PT0gU3RyaW5nKGIpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIGlzRXF1aXZhbGVudCAocmVmQSwgcmVmQikge1xuICAvLyBpZiBuYW1lZCwgbmFtZSBtdXN0IG1hdGNoXG4gIGlmICgocmVmQS5uYW1lIHx8IHJlZkIubmFtZSkgJiYgcmVmQS5uYW1lICE9PSByZWZCLm5hbWUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gaWYgc3RydWN0dXJlZFxuICBpZiAoKHJlZkEuY29sdW1ucyB8fCByZWZCLmNvbHVtbnMpKSB7XG4gICAgaWYgKHJlZkEudGFibGUgIT09IHJlZkIudGFibGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFzYW1lQXJyYXkocmVmQS5jb2x1bW5zLCByZWZCLmNvbHVtbnMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghc2FtZUFycmF5KHJlZkEuc2VjdGlvbnMsIHJlZkIuc2VjdGlvbnMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIGlmIHJhbmdlZCwgcmFuZ2UgbXVzdCBoYXZlIHRoZSBzYW1lIGRpbWVuc2lvbnMgKHdlIGRvbid0IGNhcmUgYWJvdXQgJClcbiAgaWYgKHJlZkEucmFuZ2UgfHwgcmVmQi5yYW5nZSkge1xuICAgIGlmIChcbiAgICAgICFzYW1lVmFsdWUocmVmQS5yYW5nZS50b3AsIHJlZkIucmFuZ2UudG9wKSB8fFxuICAgICAgIXNhbWVWYWx1ZShyZWZBLnJhbmdlLmJvdHRvbSwgcmVmQi5yYW5nZS5ib3R0b20pIHx8XG4gICAgICAhc2FtZVZhbHVlKHJlZkEucmFuZ2UubGVmdCwgcmVmQi5yYW5nZS5sZWZ0KSB8fFxuICAgICAgIXNhbWVWYWx1ZShyZWZBLnJhbmdlLnJpZ2h0LCByZWZCLnJhbmdlLnJpZ2h0KVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBtdXN0IGhhdmUgc2FtZSBjb250ZXh0XG4gIGlmIChcbiAgICAhc2FtZVN0cihyZWZBLndvcmtib29rTmFtZSwgcmVmQi53b3JrYm9va05hbWUpIHx8XG4gICAgIXNhbWVTdHIocmVmQS5zaGVldE5hbWUsIHJlZkIuc2hlZXROYW1lKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGFkZENvbnRleHQgKHJlZiwgc2hlZXROYW1lLCB3b3JrYm9va05hbWUpIHtcbiAgaWYgKCFyZWYuc2hlZXROYW1lKSB7XG4gICAgcmVmLnNoZWV0TmFtZSA9IHNoZWV0TmFtZTtcbiAgfVxuICBpZiAoIXJlZi53b3JrYm9va05hbWUpIHtcbiAgICByZWYud29ya2Jvb2tOYW1lID0gd29ya2Jvb2tOYW1lO1xuICB9XG4gIHJldHVybiByZWY7XG59XG5cbi8qKlxuICogUnVucyB0aHJvdWdoIGEgbGlzdCBvZiB0b2tlbnMgYW5kIGFkZHMgZXh0cmEgYXR0cmlidXRlcyBzdWNoIGFzIG1hdGNoaW5nXG4gKiBwYXJlbnMgYW5kIHJhbmdlcy5cbiAqXG4gKiBUaGUgYGNvbnRleHRgIHBhcmFtZXRlciBkZWZpbmVzIGRlZmF1bHQgcmVmZXJlbmNlIGF0dHJpYnV0ZXM6XG4gKiBgeyB3b3JrYm9va05hbWU6ICdyZXBvcnQueGxzeCcsIHNoZWV0TmFtZTogJ1NoZWV0MScgfWAuXG4gKiBJZiBzdXBwbGllZCwgdGhlc2UgYXJlIHVzZWQgdG8gbWF0Y2ggYEExYCB0byBgU2hlZXQxIUExYC5cbiAqXG4gKiBBbGwgdG9rZW5zIHdpbGwgYmUgdGFnZ2VkIHdpdGggYSBgLmRlcHRoYCBudW1iZXIgdmFsdWUgdG8gaW5kaWNhdGluZyB0aGVcbiAqIGxldmVsIG9mIG5lc3RpbmcgaW4gcGFyZW50aGVzZXMgYXMgd2VsbCBhcyBhbiBgLmluZGV4YCBudW1iZXIgaW5kaWNhdGluZ1xuICogdGhlaXIgemVybyBiYXNlZCBwb3NpdGlvbiBpbiB0aGUgbGlzdC5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXJyYXkgb2YgdG9rZW5zIGJ1dCB0aGUgZm9sbG93aW5nXG4gKiBwcm9wZXJ0aWVzIHdpbGwgYWRkZWQgdG8gdG9rZW5zIChhcyBhcHBsaWNhYmxlKTpcbiAqXG4gKiAjIyMjIFBhcmVudGhlc2VzICggKVxuICpcbiAqIE1hdGNoaW5nIHBhcmVucyB3aWxsIGJlIHRhZ2dlZCB3aXRoIGAuZ3JvdXBJZGAgc3RyaW5nIGlkZW50aWZpZXIgYXMgd2VsbCBhc1xuICogYSBgLmRlcHRoYCBudW1iZXIgdmFsdWUgKGluZGljYXRpbmcgdGhlIGxldmVsIG9mIG5lc3RpbmcpLlxuICpcbiAqIENsb3NpbmcgcGFyZW5zIHdpdGhvdXQgYSBjb3VudGVycGFydCB3aWxsIGJlIHRhZ2dlZCB3aXRoIGAuZXJyb3JgXG4gKiAoYm9vbGVhbiB0cnVlKS5cbiAqXG4gKiAjIyMjIEN1cmx5IGJyYWNrZXRzIHsgfVxuICpcbiAqIE1hdGNoaW5nIGN1cmx5IGJyYWNrZXRzIHdpbGwgYmUgdGFnZ2VkIHdpdGggYC5ncm91cElkYCBzdHJpbmcgaWRlbnRpZmllci5cbiAqIFRoZXNlIG1heSBub3QgYmUgbmVzdGVkIGluIEV4Y2VsLlxuICpcbiAqIENsb3NpbmcgY3VybHkgYnJhY2tldHMgd2l0aG91dCBhIGNvdW50ZXJwYXJ0IHdpbGwgYmUgdGFnZ2VkIHdpdGggYC5lcnJvcmBcbiAqIChib29sZWFuIGB0cnVlYCkuXG4gKlxuICogIyMjIyBSYW5nZXMgKGBSRUZfUkFOR0VgIG9yIGBSRUZfQkVBTWAgdHlwZSB0b2tlbnMpXG4gKlxuICogQWxsIHJhbmdlcyB3aWxsIGJlIHRhZ2dlZCB3aXRoIGAuZ3JvdXBJZGAgc3RyaW5nIGlkZW50aWZpZXIgcmVnYXJkbGVzcyBvZlxuICogdGhlIG51bWJlciBvZiB0aW1lcyB0aGV5IG9jY3VyLlxuICpcbiAqICMjIyMgVG9rZW5zIG9mIHR5cGUgYFVOS05PV05gXG4gKlxuICogQWxsIHdpbGwgYmUgdGFnZ2VkIHdpdGggYC5lcnJvcmAgKGJvb2xlYW4gYHRydWVgKS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PFRva2VuPn0gdG9rZW5saXN0IEFuIGFycmF5IG9mIHRva2VucyAoZnJvbSBgdG9rZW5pemUoKWApXG4gKiBAcGFyYW0ge29iamVjdH0gW2NvbnRleHQ9e31dIEEgY29udGVzdCB1c2VkIHRvIG1hdGNoIGBBMWAgdG8gYFNoZWV0MSFBMWAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc2hlZXROYW1lPScnXSBBbiBpbXBsaWVkIHNoZWV0IG5hbWUgKCdTaGVldDEnKVxuICogQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0Lndvcmtib29rTmFtZT0nJ10gQW4gaW1wbGllZCB3b3JrYm9vayBuYW1lICgncmVwb3J0Lnhsc3gnKVxuICogQHJldHVybnMge0FycmF5PFRva2VuRW5oYW5jZWQ+fSBUaGUgaW5wdXQgYXJyYXkgd2l0aCB0aGUgZW5jaGFuY2VkIHRva2Vuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkVG9rZW5NZXRhICh0b2tlbmxpc3QsIHsgc2hlZXROYW1lID0gJycsIHdvcmtib29rTmFtZSA9ICcnIH0gPSB7fSkge1xuICBjb25zdCBwYXJlblN0YWNrID0gW107XG4gIGxldCBhcnJheVN0YXJ0ID0gbnVsbDtcbiAgY29uc3QgdWlkID0gZ2V0SURlcigpO1xuICBjb25zdCBrbm93blJlZnMgPSBbXTtcblxuICBjb25zdCBnZXRDdXJyRGVwdGggPSAoKSA9PiBwYXJlblN0YWNrLmxlbmd0aCArIChhcnJheVN0YXJ0ID8gMSA6IDApO1xuXG4gIHRva2VubGlzdC5mb3JFYWNoKCh0b2tlbiwgaSkgPT4ge1xuICAgIHRva2VuLmluZGV4ID0gaTtcbiAgICB0b2tlbi5kZXB0aCA9IGdldEN1cnJEZXB0aCgpO1xuICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gJygnKSB7XG4gICAgICBwYXJlblN0YWNrLnB1c2godG9rZW4pO1xuICAgICAgdG9rZW4uZGVwdGggPSBnZXRDdXJyRGVwdGgoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodG9rZW4udmFsdWUgPT09ICcpJykge1xuICAgICAgY29uc3QgY291bnRlciA9IHBhcmVuU3RhY2sucG9wKCk7XG4gICAgICBpZiAoY291bnRlcikge1xuICAgICAgICBjb25zdCBwYWlySWQgPSB1aWQoKTtcbiAgICAgICAgdG9rZW4uZ3JvdXBJZCA9IHBhaXJJZDtcbiAgICAgICAgdG9rZW4uZGVwdGggPSBjb3VudGVyLmRlcHRoO1xuICAgICAgICBjb3VudGVyLmdyb3VwSWQgPSBwYWlySWQ7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdG9rZW4uZXJyb3IgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0b2tlbi52YWx1ZSA9PT0gJ3snKSB7XG4gICAgICBpZiAoIWFycmF5U3RhcnQpIHtcbiAgICAgICAgYXJyYXlTdGFydCA9IHRva2VuO1xuICAgICAgICB0b2tlbi5kZXB0aCA9IGdldEN1cnJEZXB0aCgpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRva2VuLmVycm9yID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodG9rZW4udmFsdWUgPT09ICd9Jykge1xuICAgICAgaWYgKGFycmF5U3RhcnQpIHtcbiAgICAgICAgY29uc3QgcGFpcklkID0gdWlkKCk7XG4gICAgICAgIHRva2VuLmdyb3VwSWQgPSBwYWlySWQ7XG4gICAgICAgIHRva2VuLmRlcHRoID0gYXJyYXlTdGFydC5kZXB0aDtcbiAgICAgICAgYXJyYXlTdGFydC5ncm91cElkID0gcGFpcklkO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRva2VuLmVycm9yID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGFycmF5U3RhcnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlIGlmIChcbiAgICAgIHRva2VuLnR5cGUgPT09IFJFRl9SQU5HRSB8fFxuICAgICAgdG9rZW4udHlwZSA9PT0gUkVGX0JFQU0gfHxcbiAgICAgIHRva2VuLnR5cGUgPT09IFJFRl9URVJOQVJZIHx8XG4gICAgICB0b2tlbi50eXBlID09PSBSRUZfU1RSVUNUXG4gICAgKSB7XG4gICAgICBjb25zdCByZWYgPSAodG9rZW4udHlwZSA9PT0gUkVGX1NUUlVDVClcbiAgICAgICAgPyBwYXJzZVN0cnVjdFJlZih0b2tlbi52YWx1ZSwgeyB4bHN4OiB0cnVlIH0pXG4gICAgICAgIDogcGFyc2VBMVJlZih0b2tlbi52YWx1ZSwgeyBhbGxvd1Rlcm5hcnk6IHRydWUsIHhsc3g6IHRydWUgfSk7XG4gICAgICBpZiAocmVmICYmIChyZWYucmFuZ2UgfHwgcmVmLmNvbHVtbnMpKSB7XG4gICAgICAgIHJlZi5zb3VyY2UgPSB0b2tlbi52YWx1ZTtcbiAgICAgICAgYWRkQ29udGV4dChyZWYsIHNoZWV0TmFtZSwgd29ya2Jvb2tOYW1lKTtcbiAgICAgICAgY29uc3Qga25vd24gPSBrbm93blJlZnMuZmluZChkID0+IGlzRXF1aXZhbGVudChkLCByZWYpKTtcbiAgICAgICAgaWYgKGtub3duKSB7XG4gICAgICAgICAgdG9rZW4uZ3JvdXBJZCA9IGtub3duLmdyb3VwSWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgcmVmLmdyb3VwSWQgPSB1aWQoKTtcbiAgICAgICAgICB0b2tlbi5ncm91cElkID0gcmVmLmdyb3VwSWQ7XG4gICAgICAgICAga25vd25SZWZzLnB1c2gocmVmKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBVTktOT1dOKSB7XG4gICAgICB0b2tlbi5lcnJvciA9IHRydWU7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHRva2VubGlzdDtcbn1cbiIsIi8qXG4qKiBSQyBub3RhdGlvbiB3b3JrcyBkaWZmZXJlbnRseSBmcm9tIEExIGluIHRoYXQgd2UgY2FuJ3QgbWVyZ2Ugc3RhdGljXG4qKiByZWZlcmVuY2VzIGpvaW5lZCBieSBgOmAuIE1lcmdpbmcgY2FuIG9ubHkgd29yayBiZXR3ZWVuIHJlZmVyZW5jZXNcbioqIHRoYXQgYXJlIHJlbGF0aXZlL2Fic29sdXRlIG9uIHRoZSBzYW1lIGF4ZXMsIHNvOlxuKiogLSBSMUMxOlIyQzIgd2lsbCB3b3JrLFxuKiogLSBSWzFdQzE6UlsyXUMyIHdpbGwgYWxzbyB3b3JrLCBidXRcbioqIC0gUlsxXUNbMV06UjJDMiBkb2Vzbid0IGhhdmUgYSBkaXJlY3QgcmVjdGFuZ2xlIHJlcHJlc2VudGlvbiB3aXRob3V0IGNvbnRleHQuXG4qL1xuaW1wb3J0IHsgcmFuZ2VPcGVyYXRvciwgdHJpbURpcmVjdGlvbiB9IGZyb20gJy4vYTEuanMnO1xuaW1wb3J0IHsgTUFYX1JPV1MsIE1BWF9DT0xTIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgcGFyc2VSZWYgfSBmcm9tICcuL3BhcnNlUmVmLmpzJztcbmltcG9ydCB7IHN0cmluZ2lmeVByZWZpeCwgc3RyaW5naWZ5UHJlZml4QWx0IH0gZnJvbSAnLi9zdHJpbmdpZnlQcmVmaXguanMnO1xuXG5jb25zdCBjbGFtcCA9IChtaW4sIHZhbCwgbWF4KSA9PiBNYXRoLm1pbihNYXRoLm1heCh2YWwsIG1pbiksIG1heCk7XG5cbmZ1bmN0aW9uIHRvQ29vcmQgKHZhbHVlLCBpc0Ficykge1xuICBpZiAoaXNBYnMpIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlICsgMSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID8gJ1snICsgdmFsdWUgKyAnXScgOiAnJztcbn1cblxuLyoqXG4gKiBTdHJpbmdpZnkgYSByYW5nZSBvYmplY3QgaW50byBSMUMxIHN5bnRheC5cbiAqXG4gKiBAaWdub3JlXG4gKiBAcHJpdmF0ZVxuICogQHNlZSBwYXJzZVIxQzFSZWZcbiAqIEBwYXJhbSB7UmFuZ2VSMUMxfSByYW5nZSAgQSByYW5nZSBvYmplY3RcbiAqIEByZXR1cm5zIHtzdHJpbmd9ICBBbiBSMUMxLXN0eWxlIHN0cmluZyByZXByZXNlbmF0aW9uIG9mIGEgcmFuZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUjFDMSAocmFuZ2UpIHtcbiAgbGV0IHsgcjAsIGMwLCByMSwgYzEgfSA9IHJhbmdlO1xuICBjb25zdCB7ICRjMCwgJGMxLCAkcjAsICRyMSB9ID0gcmFuZ2U7XG4gIGNvbnN0IG51bGxSMCA9IHIwID09IG51bGw7XG4gIGNvbnN0IG51bGxDMCA9IGMwID09IG51bGw7XG4gIGxldCBudWxsUjEgPSByMSA9PSBudWxsO1xuICBsZXQgbnVsbEMxID0gYzEgPT0gbnVsbDtcbiAgY29uc3Qgb3AgPSByYW5nZU9wZXJhdG9yKHJhbmdlLnRyaW0pO1xuICBjb25zdCBoYXNUcmltID0gISFyYW5nZS50cmltO1xuICByMCA9IGNsYW1wKCRyMCA/IDAgOiAtTUFYX1JPV1MsIHIwIHwgMCwgTUFYX1JPV1MpO1xuICBjMCA9IGNsYW1wKCRjMCA/IDAgOiAtTUFYX0NPTFMsIGMwIHwgMCwgTUFYX0NPTFMpO1xuICBpZiAoIW51bGxSMCAmJiBudWxsUjEgJiYgIW51bGxDMCAmJiBudWxsQzEpIHtcbiAgICByMSA9IHIwO1xuICAgIG51bGxSMSA9IGZhbHNlO1xuICAgIGMxID0gYzA7XG4gICAgbnVsbEMxID0gZmFsc2U7XG4gIH1cbiAgZWxzZSB7XG4gICAgcjEgPSBjbGFtcCgkcjEgPyAwIDogLU1BWF9ST1dTLCByMSB8IDAsIE1BWF9ST1dTKTtcbiAgICBjMSA9IGNsYW1wKCRjMSA/IDAgOiAtTUFYX0NPTFMsIGMxIHwgMCwgTUFYX0NPTFMpO1xuICB9XG4gIC8vIEM6Q1xuICBjb25zdCBhbGxSb3dzID0gcjAgPT09IDAgJiYgcjEgPj0gTUFYX1JPV1M7XG4gIGlmICgoYWxsUm93cyAmJiAhbnVsbEMwICYmICFudWxsQzEpIHx8IChudWxsUjAgJiYgbnVsbFIxKSkge1xuICAgIGNvbnN0IGEgPSB0b0Nvb3JkKGMwLCAkYzApO1xuICAgIGNvbnN0IGIgPSB0b0Nvb3JkKGMxLCAkYzEpO1xuICAgIHJldHVybiAnQycgKyAoYSA9PT0gYiAmJiAhaGFzVHJpbSA/IGEgOiBhICsgb3AgKyAnQycgKyBiKTtcbiAgfVxuICAvLyBSOlJcbiAgY29uc3QgYWxsQ29scyA9IGMwID09PSAwICYmIGMxID49IE1BWF9DT0xTO1xuICBpZiAoKGFsbENvbHMgJiYgIW51bGxSMCAmJiAhbnVsbFIxKSB8fCAobnVsbEMwICYmIG51bGxDMSkpIHtcbiAgICBjb25zdCBhID0gdG9Db29yZChyMCwgJHIwKTtcbiAgICBjb25zdCBiID0gdG9Db29yZChyMSwgJHIxKTtcbiAgICByZXR1cm4gJ1InICsgKGEgPT09IGIgJiYgIWhhc1RyaW0gPyBhIDogYSArIG9wICsgJ1InICsgYik7XG4gIH1cbiAgY29uc3Qgc19yMCA9IHRvQ29vcmQocjAsICRyMCk7XG4gIGNvbnN0IHNfcjEgPSB0b0Nvb3JkKHIxLCAkcjEpO1xuICBjb25zdCBzX2MwID0gdG9Db29yZChjMCwgJGMwKTtcbiAgY29uc3Qgc19jMSA9IHRvQ29vcmQoYzEsICRjMSk7XG4gIC8vIFJDOlIsIFJDOkNcbiAgaWYgKG51bGxSMCB8fCBudWxsUjEgfHwgbnVsbEMwIHx8IG51bGxDMSkge1xuICAgIHJldHVybiAoXG4gICAgICAobnVsbFIwID8gJycgOiAnUicgKyBzX3IwKSArXG4gICAgICAobnVsbEMwID8gJycgOiAnQycgKyBzX2MwKSArXG4gICAgICBvcCArXG4gICAgICAobnVsbFIxID8gJycgOiAnUicgKyBzX3IxKSArXG4gICAgICAobnVsbEMxID8gJycgOiAnQycgKyBzX2MxKVxuICAgICk7XG4gIH1cbiAgLy8gUkM6UkNcbiAgaWYgKHNfcjAgIT09IHNfcjEgfHwgc19jMCAhPT0gc19jMSkge1xuICAgIHJldHVybiAnUicgKyBzX3IwICsgJ0MnICsgc19jMCArIG9wICsgJ1InICsgc19yMSArICdDJyArIHNfYzE7XG4gIH1cbiAgLy8gUkNcbiAgcmV0dXJuICdSJyArIHNfcjAgKyAnQycgKyBzX2MwO1xufVxuXG5mdW5jdGlvbiBwYXJzZVIxQzFQYXJ0IChyZWYpIHtcbiAgbGV0IHIwID0gbnVsbDtcbiAgbGV0IGMwID0gbnVsbDtcbiAgbGV0ICRyMCA9IG51bGw7XG4gIGxldCAkYzAgPSBudWxsO1xuICAvLyBSIHBhcnRcbiAgY29uc3Qgcm0gPSAvXlIoPzpcXFsoWystXT9cXGQrKVxcXXwoXFxkKykpPy8uZXhlYyhyZWYpO1xuICBpZiAocm0pIHtcbiAgICBpZiAocm1bMV0pIHtcbiAgICAgIHIwID0gcGFyc2VJbnQocm1bMV0sIDEwKTtcbiAgICAgICRyMCA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmIChybVsyXSkge1xuICAgICAgcjAgPSBwYXJzZUludChybVsyXSwgMTApIC0gMTtcbiAgICAgICRyMCA9IHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcjAgPSAwO1xuICAgICAgJHIwID0gZmFsc2U7XG4gICAgfVxuICAgIHJlZiA9IHJlZi5zbGljZShybVswXS5sZW5ndGgpO1xuICB9XG4gIC8vIEMgcGFydFxuICBjb25zdCBjbSA9IC9eQyg/OlxcWyhbKy1dP1xcZCspXFxdfChcXGQrKSk/Ly5leGVjKHJlZik7XG4gIGlmIChjbSkge1xuICAgIGlmIChjbVsxXSkge1xuICAgICAgYzAgPSBwYXJzZUludChjbVsxXSwgMTApO1xuICAgICAgJGMwID0gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNtWzJdKSB7XG4gICAgICBjMCA9IHBhcnNlSW50KGNtWzJdLCAxMCkgLSAxO1xuICAgICAgJGMwID0gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjMCA9IDA7XG4gICAgICAkYzAgPSBmYWxzZTtcbiAgICB9XG4gICAgcmVmID0gcmVmLnNsaWNlKGNtWzBdLmxlbmd0aCk7XG4gIH1cbiAgLy8gbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBwYXJ0IChhbmQgbm90aGluZyBtb3JlKVxuICBpZiAoKCFybSAmJiAhY20pIHx8IHJlZi5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gWyByMCwgYzAsICRyMCwgJGMwIF07XG59XG5cbi8qKlxuICogUGFyc2UgYSBzaW1wbGUgc3RyaW5nIHJlZmVyZW5jZSB0byBhbiBSMUMxIHJhbmdlIGludG8gYSByYW5nZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBpZ25vcmVcbiAqIEBzZWUgcGFyc2VBMVJlZlxuICogQHBhcmFtIHtzdHJpbmd9IHJhbmdlU3RyaW5nICBBIHJhbmdlIHN0cmluZ1xuICogQHJldHVybnMgeyhSYW5nZVIxQzF8bnVsbCl9IEFuIG9iamVjdCByZXByZXNlbnRpbmcgYSB2YWxpZCByZWZlcmVuY2Ugb3IgbnVsbCBpZiBpdCBpcyBpbnZhbGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbVIxQzEgKHJhbmdlU3RyaW5nKSB7XG4gIGxldCBmaW5hbCA9IG51bGw7XG4gIGNvbnN0IFsgcGFydDEsIG9wLCBwYXJ0Miwgb3ZlcmZsb3cgXSA9IHJhbmdlU3RyaW5nLnNwbGl0KC8oXFwuPzpcXC4/KS8pO1xuICBpZiAob3ZlcmZsb3cpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCByYW5nZSA9IHBhcnNlUjFDMVBhcnQocGFydDEpO1xuICBjb25zdCB0cmltID0gdHJpbURpcmVjdGlvbighIW9wICYmIG9wWzBdID09PSAnLicsICEhb3AgJiYgb3Bbb3AubGVuZ3RoIC0gMV0gPT09ICcuJyk7XG4gIGlmIChyYW5nZSkge1xuICAgIGNvbnN0IFsgcjAsIGMwLCAkcjAsICRjMCBdID0gcmFuZ2U7XG4gICAgaWYgKHBhcnQyKSB7XG4gICAgICBjb25zdCBleHRlbmRUbyA9IHBhcnNlUjFDMVBhcnQocGFydDIpO1xuICAgICAgaWYgKGV4dGVuZFRvKSB7XG4gICAgICAgIGZpbmFsID0ge307XG4gICAgICAgIGNvbnN0IFsgcjEsIGMxLCAkcjEsICRjMSBdID0gZXh0ZW5kVG87XG4gICAgICAgIC8vIHJvd3NcbiAgICAgICAgaWYgKHIwICE9IG51bGwgJiYgcjEgIT0gbnVsbCkge1xuICAgICAgICAgIGZpbmFsLnIwID0gJHIwID09PSAkcjEgPyBNYXRoLm1pbihyMCwgcjEpIDogcjA7XG4gICAgICAgICAgZmluYWwuJHIwID0gJHIwO1xuICAgICAgICAgIGZpbmFsLnIxID0gJHIwID09PSAkcjEgPyBNYXRoLm1heChyMCwgcjEpIDogcjE7XG4gICAgICAgICAgZmluYWwuJHIxID0gJHIxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHIwICE9IG51bGwgJiYgcjEgPT0gbnVsbCkge1xuICAgICAgICAgIC8vIHBhcnRpYWwgUkM6Q1xuICAgICAgICAgIGZpbmFsLnIwID0gcjA7XG4gICAgICAgICAgZmluYWwuJHIwID0gJHIwO1xuICAgICAgICAgIGZpbmFsLnIxID0gbnVsbDtcbiAgICAgICAgICBmaW5hbC4kcjEgPSAkcjA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocjAgPT0gbnVsbCAmJiByMSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gcGFydGlhbCBDOlJDXG4gICAgICAgICAgZmluYWwucjAgPSByMTtcbiAgICAgICAgICBmaW5hbC4kcjAgPSAkcjE7XG4gICAgICAgICAgZmluYWwucjEgPSBudWxsO1xuICAgICAgICAgIGZpbmFsLiRyMSA9ICRyMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChyMCA9PSBudWxsICYmIHIxID09IG51bGwpIHtcbiAgICAgICAgICAvLyBDOkNcbiAgICAgICAgICBmaW5hbC5yMCA9IG51bGw7XG4gICAgICAgICAgZmluYWwuJHIwID0gZmFsc2U7XG4gICAgICAgICAgZmluYWwucjEgPSBudWxsO1xuICAgICAgICAgIGZpbmFsLiRyMSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbHVtbnNcbiAgICAgICAgaWYgKGMwICE9IG51bGwgJiYgYzEgIT0gbnVsbCkge1xuICAgICAgICAgIGZpbmFsLmMwID0gJGMwID09PSAkYzEgPyBNYXRoLm1pbihjMCwgYzEpIDogYzA7XG4gICAgICAgICAgZmluYWwuJGMwID0gJGMwO1xuICAgICAgICAgIGZpbmFsLmMxID0gJGMwID09PSAkYzEgPyBNYXRoLm1heChjMCwgYzEpIDogYzE7XG4gICAgICAgICAgZmluYWwuJGMxID0gJGMxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGMwICE9IG51bGwgJiYgYzEgPT0gbnVsbCkge1xuICAgICAgICAgIGZpbmFsLmMwID0gYzA7XG4gICAgICAgICAgZmluYWwuJGMwID0gJGMwO1xuICAgICAgICAgIGZpbmFsLmMxID0gbnVsbDtcbiAgICAgICAgICBmaW5hbC4kYzEgPSAkYzA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYzAgPT0gbnVsbCAmJiBjMSAhPSBudWxsKSB7XG4gICAgICAgICAgZmluYWwuYzAgPSBjMTtcbiAgICAgICAgICBmaW5hbC4kYzAgPSAkYzE7XG4gICAgICAgICAgZmluYWwuYzEgPSBudWxsO1xuICAgICAgICAgIGZpbmFsLiRjMSA9ICRjMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjMCA9PSBudWxsICYmIGMxID09IG51bGwpIHtcbiAgICAgICAgICBmaW5hbC5jMCA9IG51bGw7XG4gICAgICAgICAgZmluYWwuJGMwID0gZmFsc2U7XG4gICAgICAgICAgZmluYWwuYzEgPSBudWxsO1xuICAgICAgICAgIGZpbmFsLiRjMSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHJhbmdlIG9ubHkgLSBubyBzZWNvbmQgcGFydFxuICAgIGVsc2UgaWYgKHIwICE9IG51bGwgJiYgYzAgPT0gbnVsbCkge1xuICAgICAgZmluYWwgPSB7XG4gICAgICAgIHIwOiByMCxcbiAgICAgICAgYzA6IG51bGwsXG4gICAgICAgIHIxOiByMCxcbiAgICAgICAgYzE6IG51bGwsXG4gICAgICAgICRyMDogJHIwLFxuICAgICAgICAkYzA6IGZhbHNlLFxuICAgICAgICAkcjE6ICRyMCxcbiAgICAgICAgJGMxOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAocjAgPT0gbnVsbCAmJiBjMCAhPSBudWxsKSB7XG4gICAgICBmaW5hbCA9IHtcbiAgICAgICAgcjA6IG51bGwsXG4gICAgICAgIGMwOiBjMCxcbiAgICAgICAgcjE6IG51bGwsXG4gICAgICAgIGMxOiBjMCxcbiAgICAgICAgJHIwOiBmYWxzZSxcbiAgICAgICAgJGMwOiAkYzAsXG4gICAgICAgICRyMTogZmFsc2UsXG4gICAgICAgICRjMTogJGMwXG4gICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGZpbmFsID0ge1xuICAgICAgICByMDogcjAgfHwgMCxcbiAgICAgICAgYzA6IGMwIHx8IDAsXG4gICAgICAgIHIxOiByMCB8fCAwLFxuICAgICAgICBjMTogYzAgfHwgMCxcbiAgICAgICAgJHIwOiAkcjAgfHwgZmFsc2UsXG4gICAgICAgICRjMDogJGMwIHx8IGZhbHNlLFxuICAgICAgICAkcjE6ICRyMCB8fCBmYWxzZSxcbiAgICAgICAgJGMxOiAkYzAgfHwgZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGlmIChmaW5hbCAmJiB0cmltKSB7XG4gICAgZmluYWwudHJpbSA9IHRyaW07XG4gIH1cbiAgcmV0dXJuIGZpbmFsO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgc3RyaW5nIHJlZmVyZW5jZSBpbnRvIGFuIG9iamVjdCByZXByZXNlbnRpbmcgaXQuXG4gKlxuICogYGBganNcbiAqIHBhcnNlUjFDMVJlZignU2hlZXQxIVJbOV1DOTpSWzldQzknKTtcbiAqIC8vID0+IHtcbiAqIC8vICAgY29udGV4dDogWyAnU2hlZXQxJyBdLFxuICogLy8gICByYW5nZToge1xuICogLy8gICAgIHIwOiA5LFxuICogLy8gICAgIGMwOiA4LFxuICogLy8gICAgIHIxOiA5LFxuICogLy8gICAgIGMxOiA4LFxuICogLy8gICAgICRjMDogdHJ1ZSxcbiAqIC8vICAgICAkYzE6IHRydWVcbiAqIC8vICAgICAkcjA6IGZhbHNlLFxuICogLy8gICAgICRyMTogZmFsc2VcbiAqIC8vICAgfVxuICogLy8gfVxuICogYGBgXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZlN0cmluZyBBbiBSMUMxLXN0eWxlIHJlZmVyZW5jZSBzdHJpbmdcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gIE9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYWxsb3dOYW1lZD10cnVlXSAgRW5hYmxlIHBhcnNpbmcgbmFtZXMgYXMgd2VsbCBhcyByYW5nZXMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93VGVybmFyeT1mYWxzZV0gIEVuYWJsZXMgdGhlIHJlY29nbml0aW9uIG9mIHRlcm5hcnkgcmFuZ2VzIGluIHRoZSBzdHlsZSBvZiBgQTE6QWAgb3IgYEExOjFgLiBUaGVzZSBhcmUgc3VwcG9ydGVkIGJ5IEdvb2dsZSBTaGVldHMgYnV0IG5vdCBFeGNlbC4gU2VlOiBSZWZlcmVuY2VzLm1kLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy54bHN4PWZhbHNlXSAgU3dpdGNoZXMgdG8gdGhlIGBbMV1TaGVldDEhQTFgIG9yIGBbMV0hbmFtZWAgcHJlZml4IHN5bnRheCBmb3JtIGZvciBleHRlcm5hbCB3b3JrYm9va3MuIFNlZTogW1ByZWZpeGVzLm1kXSguL1ByZWZpeGVzLm1kKVxuICogQHJldHVybnMgeyhSZWZlcmVuY2VSMUMxfG51bGwpfSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgdmFsaWQgcmVmZXJlbmNlIG9yIG51bGwgaWYgaXQgaXMgaW52YWxpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUjFDMVJlZiAocmVmU3RyaW5nLCB7IGFsbG93TmFtZWQgPSB0cnVlLCBhbGxvd1Rlcm5hcnkgPSBmYWxzZSwgeGxzeCA9IGZhbHNlIH0gPSB7fSkge1xuICBjb25zdCBkID0gcGFyc2VSZWYocmVmU3RyaW5nLCB7IGFsbG93TmFtZWQsIGFsbG93VGVybmFyeSwgeGxzeCwgcjFjMTogdHJ1ZSB9KTtcbiAgaWYgKGQgJiYgKGQucjAgfHwgZC5uYW1lKSkge1xuICAgIGNvbnN0IHJhbmdlID0gZC5yMVxuICAgICAgPyBmcm9tUjFDMShkLnIwICsgZC5vcGVyYXRvciArIGQucjEpXG4gICAgICA6IGZyb21SMUMxKGQucjApO1xuICAgIGlmIChyYW5nZSkge1xuICAgICAgcmV0dXJuIHhsc3hcbiAgICAgICAgPyB7IHdvcmtib29rTmFtZTogZC53b3JrYm9va05hbWUsIHNoZWV0TmFtZTogZC5zaGVldE5hbWUsIHJhbmdlIH1cbiAgICAgICAgOiB7IGNvbnRleHQ6IGQuY29udGV4dCwgcmFuZ2UgfTtcbiAgICB9XG4gICAgaWYgKGQubmFtZSkge1xuICAgICAgcmV0dXJuIHhsc3hcbiAgICAgICAgPyB7IHdvcmtib29rTmFtZTogZC53b3JrYm9va05hbWUsIHNoZWV0TmFtZTogZC5zaGVldE5hbWUsIG5hbWU6IGQubmFtZSB9XG4gICAgICAgIDogeyBjb250ZXh0OiBkLmNvbnRleHQsIG5hbWU6IGQubmFtZSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBHZXQgYW4gUjFDMS1zdHlsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSByZWZlcmVuY2Ugb2JqZWN0LlxuICpcbiAqIGBgYGpzXG4gKiBzdHJpbmdpZnlSMUMxUmVmKHtcbiAqICAgY29udGV4dDogWyAnU2hlZXQxJyBdLFxuICogICByYW5nZToge1xuICogICAgIHIwOiA5LFxuICogICAgIGMwOiA4LFxuICogICAgIHIxOiA5LFxuICogICAgIGMxOiA4LFxuICogICAgICRjMDogdHJ1ZSxcbiAqICAgICAkYzE6IHRydWVcbiAqICAgICAkcjA6IGZhbHNlLFxuICogICAgICRyMTogZmFsc2VcbiAqICAgfVxuICogfSk7XG4gKiAvLyA9PiAnU2hlZXQxIVJbOV1DOTpSWzldQzknXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1JlZmVyZW5jZVIxQzF9IHJlZk9iamVjdCBBIHJlZmVyZW5jZSBvYmplY3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gIE9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMueGxzeD1mYWxzZV0gIFN3aXRjaGVzIHRvIHRoZSBgWzFdU2hlZXQxIUExYCBvciBgWzFdIW5hbWVgIHByZWZpeCBzeW50YXggZm9ybSBmb3IgZXh0ZXJuYWwgd29ya2Jvb2tzLiBTZWU6IFtQcmVmaXhlcy5tZF0oLi9QcmVmaXhlcy5tZClcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSByZWZlcmVuY2UgaW4gUjFDMS1zdHlsZSBzdHJpbmcgZm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlSMUMxUmVmIChyZWZPYmplY3QsIHsgeGxzeCA9IGZhbHNlIH0gPSB7fSkge1xuICBjb25zdCBwcmVmaXggPSB4bHN4XG4gICAgPyBzdHJpbmdpZnlQcmVmaXhBbHQocmVmT2JqZWN0KVxuICAgIDogc3RyaW5naWZ5UHJlZml4KHJlZk9iamVjdCk7XG4gIHJldHVybiBwcmVmaXggKyAoXG4gICAgcmVmT2JqZWN0Lm5hbWUgPyByZWZPYmplY3QubmFtZSA6IHRvUjFDMShyZWZPYmplY3QucmFuZ2UpXG4gICk7XG59XG4iLCJpbXBvcnQgeyBNQVhfUk9XUywgTUFYX0NPTFMsIEVSUk9SIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgZnJvbUExLCBwYXJzZUExUmVmLCBzdHJpbmdpZnlBMVJlZiB9IGZyb20gJy4vYTEuanMnO1xuaW1wb3J0IHsgcGFyc2VSMUMxUmVmLCBzdHJpbmdpZnlSMUMxUmVmIH0gZnJvbSAnLi9yYy5qcyc7XG5pbXBvcnQgeyB0b2tlbml6ZSB9IGZyb20gJy4vbGV4ZXIuanMnO1xuaW1wb3J0IHsgaXNSYW5nZSB9IGZyb20gJy4vaXNUeXBlLmpzJztcblxuY29uc3QgY2FsYyA9IChhYnMsIHZYLCBhWCkgPT4ge1xuICBpZiAodlggPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBhYnMgPyB2WCA6IHZYIC0gYVg7XG59O1xuXG5jb25zdCBzZXR0aW5ncyA9IHtcbiAgd2l0aExvY2F0aW9uOiBmYWxzZSxcbiAgbWVyZ2VSZWZzOiBmYWxzZSxcbiAgYWxsb3dUZXJuYXJ5OiB0cnVlLFxuICByMWMxOiBmYWxzZVxufTtcblxuLyoqXG4gKiBUcmFuc2xhdGVzIHJhbmdlcyBpbiBhIGZvcm11bGEgb3IgbGlzdCBvZiB0b2tlbnMgZnJvbSBhYnNvbHV0ZSBBMSBzeW50YXggdG9cbiAqIHJlbGF0aXZlIFIxQzEgc3ludGF4LlxuICpcbiAqIFJldHVybnMgdGhlIHNhbWUgZm9ybXVsYSB3aXRoIHRoZSByYW5nZXMgdHJhbnNsYXRlZC4gSWYgYW4gYXJyYXkgb2YgdG9rZW5zXG4gKiB3YXMgc3VwcGxpZWQsIHRoZW4gdGhlIHNhbWUgYXJyYXkgaXMgcmV0dXJuZWQuXG4gKlxuICogYGBganNcbiAqIHRyYW5zbGF0ZVRvUjFDMShcIj1TVU0oRTEwLCRFJDIsU2hlZXQhJEUkMylcIiwgXCJEMTBcIik7XG4gKiAvLyA9PiBcIj1TVU0oUkNbMV0sUjJDNSxTaGVldCFSM0M1KVwiKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7KHN0cmluZyB8IEFycmF5PFRva2VuPil9IGZvcm11bGEgQSBzdHJpbmcgKGFuIEV4Y2VsIGZvcm11bGEpIG9yIGEgdG9rZW4gbGlzdCB0aGF0IHNob3VsZCBiZSBhZGp1c3RlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhbmNob3JDZWxsIEEgc2ltcGxlIHN0cmluZyByZWZlcmVuY2UgdG8gYW4gQTEgY2VsbCBJRCAoYEFGMTIzYCBvcmAkQyQ1YCkuXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnhsc3g9ZmFsc2VdICBTd2l0Y2hlcyB0byB0aGUgYFsxXVNoZWV0MSFBMWAgb3IgYFsxXSFuYW1lYCBwcmVmaXggc3ludGF4IGZvcm0gZm9yIGV4dGVybmFsIHdvcmtib29rcy4gU2VlOiBbUHJlZml4ZXMubWRdKC4vUHJlZml4ZXMubWQpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93VGVybmFyeT10cnVlXSAgRW5hYmxlcyB0aGUgcmVjb2duaXRpb24gb2YgdGVybmFyeSByYW5nZXMgaW4gdGhlIHN0eWxlIG9mIGBBMTpBYCBvciBgQTE6MWAuIFRoZXNlIGFyZSBzdXBwb3J0ZWQgYnkgR29vZ2xlIFNoZWV0cyBidXQgbm90IEV4Y2VsLiBTZWU6IFJlZmVyZW5jZXMubWQuXG4gKiBAcmV0dXJucyB7KHN0cmluZyB8IEFycmF5PFRva2VuPil9IEEgZm9ybXVsYSBzdHJpbmcgb3IgdG9rZW4gbGlzdCAoZGVwZW5kaW5nIG9uIHdoaWNoIHdhcyBpbnB1dClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZVRvUjFDMSAoZm9ybXVsYSwgYW5jaG9yQ2VsbCwgeyB4bHN4ID0gZmFsc2UsIGFsbG93VGVybmFyeSA9IHRydWUgfSA9IHt9KSB7XG4gIGNvbnN0IHsgdG9wLCBsZWZ0IH0gPSBmcm9tQTEoYW5jaG9yQ2VsbCk7XG4gIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIGZvcm11bGEgPT09ICdzdHJpbmcnO1xuXG4gIGNvbnN0IHRva2VucyA9IGlzU3RyaW5nXG4gICAgPyB0b2tlbml6ZShmb3JtdWxhLCB7IC4uLnNldHRpbmdzLCB4bHN4LCBhbGxvd1Rlcm5hcnkgfSlcbiAgICA6IGZvcm11bGE7XG5cbiAgbGV0IG9mZnNldFNrZXcgPSAwO1xuICBjb25zdCByZWZPcHRzID0geyB4bHN4LCBhbGxvd1Rlcm5hcnkgfTtcbiAgdG9rZW5zLmZvckVhY2godG9rZW4gPT4ge1xuICAgIGlmIChpc1JhbmdlKHRva2VuKSkge1xuICAgICAgY29uc3QgdG9rZW5WYWx1ZSA9IHRva2VuLnZhbHVlO1xuICAgICAgY29uc3QgcmVmID0gcGFyc2VBMVJlZih0b2tlblZhbHVlLCByZWZPcHRzKTtcbiAgICAgIGNvbnN0IGQgPSByZWYucmFuZ2U7XG4gICAgICBjb25zdCByYW5nZSA9IHt9O1xuICAgICAgcmFuZ2UucjAgPSBjYWxjKGQuJHRvcCwgZC50b3AsIHRvcCk7XG4gICAgICByYW5nZS5yMSA9IGNhbGMoZC4kYm90dG9tLCBkLmJvdHRvbSwgdG9wKTtcbiAgICAgIHJhbmdlLmMwID0gY2FsYyhkLiRsZWZ0LCBkLmxlZnQsIGxlZnQpO1xuICAgICAgcmFuZ2UuYzEgPSBjYWxjKGQuJHJpZ2h0LCBkLnJpZ2h0LCBsZWZ0KTtcbiAgICAgIHJhbmdlLiRyMCA9IGQuJHRvcDtcbiAgICAgIHJhbmdlLiRyMSA9IGQuJGJvdHRvbTtcbiAgICAgIHJhbmdlLiRjMCA9IGQuJGxlZnQ7XG4gICAgICByYW5nZS4kYzEgPSBkLiRyaWdodDtcbiAgICAgIGlmIChkLnRyaW0pIHtcbiAgICAgICAgcmFuZ2UudHJpbSA9IGQudHJpbTtcbiAgICAgIH1cbiAgICAgIHJlZi5yYW5nZSA9IHJhbmdlO1xuICAgICAgdG9rZW4udmFsdWUgPSBzdHJpbmdpZnlSMUMxUmVmKHJlZiwgcmVmT3B0cyk7XG4gICAgICAvLyBpZiB0b2tlbiBpbmNsdWRlcyBvZmZzZXRzLCB0aG9zZSBvZmZzZXRzIGFyZSBub3cgbGlrZWx5IHdyb25nIVxuICAgICAgaWYgKHRva2VuLmxvYykge1xuICAgICAgICB0b2tlbi5sb2NbMF0gKz0gb2Zmc2V0U2tldztcbiAgICAgICAgb2Zmc2V0U2tldyArPSB0b2tlbi52YWx1ZS5sZW5ndGggLSB0b2tlblZhbHVlLmxlbmd0aDtcbiAgICAgICAgdG9rZW4ubG9jWzFdICs9IG9mZnNldFNrZXc7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKG9mZnNldFNrZXcgJiYgdG9rZW4ubG9jKSB7XG4gICAgICB0b2tlbi5sb2NbMF0gKz0gb2Zmc2V0U2tldztcbiAgICAgIHRva2VuLmxvY1sxXSArPSBvZmZzZXRTa2V3O1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGlzU3RyaW5nXG4gICAgPyB0b2tlbnMubWFwKGQgPT4gZC52YWx1ZSkuam9pbignJylcbiAgICA6IHRva2Vucztcbn1cblxuZnVuY3Rpb24gdG9GaXhlZCAodmFsLCBhYnMsIGJhc2UsIG1heCwgd3JhcEVkZ2VzID0gdHJ1ZSkge1xuICBsZXQgdiA9IHZhbDtcbiAgaWYgKHYgIT0gbnVsbCAmJiAhYWJzKSB7XG4gICAgdiA9IGJhc2UgKyB2YWw7XG4gICAgLy8gRXhjZWwgXCJ3cmFwcyBhcm91bmRcIiB3aGVuIHZhbHVlIGdvZXMgb3V0IG9mIGxvd2VyIGJvdW5kcy5cbiAgICAvLyBJdCdzIGEgYml0IHF1aXJreSBvbiBlbnRyeSBhcyBFeGNlbCBfcmVhbGx5IHdhbnRzXyB0byByZS1yZXdpdGUgdGhlXG4gICAgLy8gcmVmZXJlbmNlcyBidXQgdGhlIGJlaGF2aW91ciBpcyBjb25zaXN0ZW50IHdpdGggSU5ESVJFQ1Q6XG4gICAgLy8gLi4uIEluIEExOiBSQ1stMV0gPT4gUjFDWzE2MzgzXS5cbiAgICBpZiAodiA8IDApIHtcbiAgICAgIGlmICghd3JhcEVkZ2VzKSB7XG4gICAgICAgIHJldHVybiBOYU47XG4gICAgICB9XG4gICAgICB2ID0gbWF4ICsgdiArIDE7XG4gICAgfVxuICAgIC8vIC4uLiBJbiBCMTogPVJDWzE2MzgzXSA9PiA9UkNbLTFdXG4gICAgaWYgKHYgPiBtYXgpIHtcbiAgICAgIGlmICghd3JhcEVkZ2VzKSB7XG4gICAgICAgIHJldHVybiBOYU47XG4gICAgICB9XG4gICAgICB2IC09IG1heCArIDE7XG4gICAgfVxuICB9XG4gIHJldHVybiB2O1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgd3JhcEVkZ2VzOiB0cnVlLFxuICBtZXJnZVJlZnM6IHRydWUsXG4gIGFsbG93VGVybmFyeTogdHJ1ZSxcbiAgeGxzeDogZmFsc2Vcbn07XG5cbi8qKlxuICogVHJhbnNsYXRlcyByYW5nZXMgaW4gYSBmb3JtdWxhIG9yIGxpc3Qgb2YgdG9rZW5zIGZyb20gcmVsYXRpdmUgUjFDMSBzeW50YXggdG9cbiAqIGFic29sdXRlIEExIHN5bnRheC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBzYW1lIGZvcm11bGEgd2l0aCB0aGUgcmFuZ2VzIHRyYW5zbGF0ZWQuIElmIGFuIGFycmF5IG9mIHRva2Vuc1xuICogd2FzIHN1cHBsaWVkLCB0aGVuIHRoZSBzYW1lIGFycmF5IGlzIHJldHVybmVkLlxuICpcbiAqIGBgYGpzXG4gKiB0cmFuc2xhdGVUb0ExKFwiPVNVTShSQ1sxXSxSMkM1LFNoZWV0IVIzQzUpXCIsIFwiRDEwXCIpO1xuICogLy8gPT4gXCI9U1VNKEUxMCwkRSQyLFNoZWV0ISRFJDMpXCIpO1xuICogYGBgXG4gKlxuICogSWYgYW4gaW5wdXQgcmFuZ2UgaXMgLTEsLTEgcmVsYXRpdmUgcm93cy9jb2x1bW5zIGFuZCB0aGUgYW5jaG9yIGlzIEExLCB0aGVcbiAqIHJlc3VsdGluZyByYW5nZSB3aWxsIChieSBkZWZhdWx0KSB3cmFwIGFyb3VuZCB0byB0aGUgYm90dG9tIG9mIHRoZSBzaGVldFxuICogcmVzdWx0aW5nIGluIHRoZSByYW5nZSBYRkQxMDQ4NTc2LiBUaGlzIG1heSBub3QgYmUgd2hhdCB5b3Ugd2FudCBzbyBtYXkgc2V0XG4gKiBgd3JhcEVkZ2VzYCB0byBmYWxzZSB3aGljaCB3aWxsIGluc3RlYWQgdHVybiB0aGUgcmFuZ2UgaW50byBhIGAjUkVGIWAgZXJyb3IuXG4gKlxuICogYGBganNcbiAqIHRyYW5zbGF0ZVRvQTEoXCI9UlstMV1DWy0xXVwiLCBcIkExXCIpO1xuICogLy8gPT4gXCI9WEZEMTA0ODU3NlwiKTtcbiAqXG4gKiB0cmFuc2xhdGVUb0ExKFwiPVJbLTFdQ1stMV1cIiwgXCJBMVwiLCB7IHdyYXBFZGdlczogZmFsc2UgfSk7XG4gKiAvLyA9PiBcIj0jUkVGIVwiKTtcbiAqIGBgYFxuICpcbiAqIE5vdGUgdGhhdCBpZiB5b3UgYXJlIHBhc3NpbmcgaW4gYSBsaXN0IG9mIHRva2VucyB0aGF0IHdhcyBub3QgY3JlYXRlZCB1c2luZ1xuICogYG1lcmdlUmVmc2AgYW5kIHlvdSBkaXNhYmxlIGVkZ2Ugd3JhcHBpbmcgKG9yIHlvdSBzaW1wbHkgc2V0IGJvdGggb3B0aW9uc1xuICogdG8gZmFsc2UpLCB5b3UgY2FuIGVuZCB1cCB3aXRoIGEgZm9ybXVsYSBzdWNoIGFzIGA9I1JFRiE6QjJgIG9yXG4gKiBgPVNoZWV0MyEjUkVGITpGM2AuIFRoZXNlIGFyZSB2YWxpZCBmb3JtdWxhcyBpbiB0aGUgRXhjZWwgZm9ybXVsYSBsYW5ndWFnZVxuICogYW5kIEV4Y2VsIHdpbGwgYWNjZXB0IHRoZW0sIGJ1dCB0aGV5IGFyZSBub3Qgc3VwcG9ydGVkIGluIEdvb2dsZSBTaGVldHMuXG4gKlxuICogQHBhcmFtIHsoc3RyaW5nIHwgQXJyYXk8VG9rZW4+KX0gZm9ybXVsYSBBIHN0cmluZyAoYW4gRXhjZWwgZm9ybXVsYSkgb3IgYSB0b2tlbiBsaXN0IHRoYXQgc2hvdWxkIGJlIGFkanVzdGVkLlxuICogQHBhcmFtIHtzdHJpbmd9IGFuY2hvckNlbGwgQSBzaW1wbGUgc3RyaW5nIHJlZmVyZW5jZSB0byBhbiBBMSBjZWxsIElEIChgQUYxMjNgIG9yYCRDJDVgKS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMud3JhcEVkZ2VzPXRydWVdICBXcmFwIG91dC1vZi1ib3VuZHMgcmFuZ2VzIGFyb3VuZCBzaGVldCBlZGdlcyByYXRoZXIgdGhhbiB0dXJuaW5nIHRoZW0gdG8gI1JFRiEgZXJyb3JzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLm1lcmdlUmVmcz10cnVlXSAgIFNob3VsZCByYW5nZXMgYmUgdHJlYXRlZCBhcyB3aG9sZSByZWZlcmVuY2VzIChgU2hlZXQxIUExOkIyYCkgb3IgYXMgc2VwYXJhdGUgdG9rZW5zIGZvciBlYWNoIHBhcnQ6IChgU2hlZXQxYCxgIWAsYEExYCxgOmAsYEIyYCkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnhsc3g9ZmFsc2VdICBTd2l0Y2hlcyB0byB0aGUgYFsxXVNoZWV0MSFBMWAgb3IgYFsxXSFuYW1lYCBwcmVmaXggc3ludGF4IGZvcm0gZm9yIGV4dGVybmFsIHdvcmtib29rcy4gU2VlOiBbUHJlZml4ZXMubWRdKC4vUHJlZml4ZXMubWQpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93VGVybmFyeT10cnVlXSAgRW5hYmxlcyB0aGUgcmVjb2duaXRpb24gb2YgdGVybmFyeSByYW5nZXMgaW4gdGhlIHN0eWxlIG9mIGBBMTpBYCBvciBgQTE6MWAuIFRoZXNlIGFyZSBzdXBwb3J0ZWQgYnkgR29vZ2xlIFNoZWV0cyBidXQgbm90IEV4Y2VsLiBTZWU6IFJlZmVyZW5jZXMubWQuXG4gKiBAcmV0dXJucyB7KHN0cmluZyB8IEFycmF5PFRva2VuPil9IEEgZm9ybXVsYSBzdHJpbmcgb3IgdG9rZW4gbGlzdCAoZGVwZW5kaW5nIG9uIHdoaWNoIHdhcyBpbnB1dClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZVRvQTEgKGZvcm11bGEsIGFuY2hvckNlbGwsIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucykge1xuICBjb25zdCBhbmNob3IgPSBmcm9tQTEoYW5jaG9yQ2VsbCk7XG4gIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIGZvcm11bGEgPT09ICdzdHJpbmcnO1xuICBjb25zdCBvcHRzID0geyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9O1xuXG4gIGNvbnN0IHRva2VucyA9IGlzU3RyaW5nXG4gICAgPyB0b2tlbml6ZShmb3JtdWxhLCB7XG4gICAgICB3aXRoTG9jYXRpb246IGZhbHNlLFxuICAgICAgbWVyZ2VSZWZzOiBvcHRzLm1lcmdlUmVmcyxcbiAgICAgIHhsc3g6IG9wdHMueGxzeCxcbiAgICAgIGFsbG93VGVybmFyeTogb3B0cy5hbGxvd1Rlcm5hcnksXG4gICAgICByMWMxOiB0cnVlXG4gICAgfSlcbiAgICA6IGZvcm11bGE7XG5cbiAgbGV0IG9mZnNldFNrZXcgPSAwO1xuICBjb25zdCByZWZPcHRzID0geyB4bHN4OiBvcHRzLnhsc3gsIGFsbG93VGVybmFyeTogb3B0cy5hbGxvd1Rlcm5hcnkgfTtcbiAgdG9rZW5zLmZvckVhY2godG9rZW4gPT4ge1xuICAgIGlmIChpc1JhbmdlKHRva2VuKSkge1xuICAgICAgY29uc3QgdG9rZW5WYWx1ZSA9IHRva2VuLnZhbHVlO1xuICAgICAgY29uc3QgcmVmID0gcGFyc2VSMUMxUmVmKHRva2VuVmFsdWUsIHJlZk9wdHMpO1xuICAgICAgY29uc3QgZCA9IHJlZi5yYW5nZTtcbiAgICAgIGNvbnN0IHJhbmdlID0ge307XG4gICAgICBjb25zdCByMCA9IHRvRml4ZWQoZC5yMCwgZC4kcjAsIGFuY2hvci50b3AsIE1BWF9ST1dTLCBvcHRzLndyYXBFZGdlcyk7XG4gICAgICBjb25zdCByMSA9IHRvRml4ZWQoZC5yMSwgZC4kcjEsIGFuY2hvci50b3AsIE1BWF9ST1dTLCBvcHRzLndyYXBFZGdlcyk7XG4gICAgICBpZiAocjAgPiByMSkge1xuICAgICAgICByYW5nZS50b3AgPSByMTtcbiAgICAgICAgcmFuZ2UuJHRvcCA9IGQuJHIxO1xuICAgICAgICByYW5nZS5ib3R0b20gPSByMDtcbiAgICAgICAgcmFuZ2UuJGJvdHRvbSA9IGQuJHIwO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJhbmdlLnRvcCA9IHIwO1xuICAgICAgICByYW5nZS4kdG9wID0gZC4kcjA7XG4gICAgICAgIHJhbmdlLmJvdHRvbSA9IHIxO1xuICAgICAgICByYW5nZS4kYm90dG9tID0gZC4kcjE7XG4gICAgICB9XG4gICAgICBjb25zdCBjMCA9IHRvRml4ZWQoZC5jMCwgZC4kYzAsIGFuY2hvci5sZWZ0LCBNQVhfQ09MUywgb3B0cy53cmFwRWRnZXMpO1xuICAgICAgY29uc3QgYzEgPSB0b0ZpeGVkKGQuYzEsIGQuJGMxLCBhbmNob3IubGVmdCwgTUFYX0NPTFMsIG9wdHMud3JhcEVkZ2VzKTtcbiAgICAgIGlmIChjMCA+IGMxKSB7XG4gICAgICAgIHJhbmdlLmxlZnQgPSBjMTtcbiAgICAgICAgcmFuZ2UuJGxlZnQgPSBkLiRjMTtcbiAgICAgICAgcmFuZ2UucmlnaHQgPSBjMDtcbiAgICAgICAgcmFuZ2UuJHJpZ2h0ID0gZC4kYzA7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmFuZ2UubGVmdCA9IGMwO1xuICAgICAgICByYW5nZS4kbGVmdCA9IGQuJGMwO1xuICAgICAgICByYW5nZS5yaWdodCA9IGMxO1xuICAgICAgICByYW5nZS4kcmlnaHQgPSBkLiRjMTtcbiAgICAgIH1cbiAgICAgIGlmIChkLnRyaW0pIHtcbiAgICAgICAgcmFuZ2UudHJpbSA9IGQudHJpbTtcbiAgICAgIH1cbiAgICAgIGlmIChpc05hTihyMCkgfHwgaXNOYU4ocjEpIHx8IGlzTmFOKGMwKSB8fCBpc05hTihjMSkpIHtcbiAgICAgICAgLy8gY29udmVydCB0byByZWYgZXJyb3JcbiAgICAgICAgdG9rZW4udHlwZSA9IEVSUk9SO1xuICAgICAgICB0b2tlbi52YWx1ZSA9ICcjUkVGISc7XG4gICAgICAgIGRlbGV0ZSB0b2tlbi5ncm91cElkO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJlZi5yYW5nZSA9IHJhbmdlO1xuICAgICAgICB0b2tlbi52YWx1ZSA9IHN0cmluZ2lmeUExUmVmKHJlZiwgcmVmT3B0cyk7XG4gICAgICB9XG4gICAgICAvLyBpZiB0b2tlbiBpbmNsdWRlcyBvZmZzZXRzLCB0aG9zZSBvZmZzZXRzIGFyZSBub3cgbGlrZWx5IHdyb25nIVxuICAgICAgaWYgKHRva2VuLmxvYykge1xuICAgICAgICB0b2tlbi5sb2NbMF0gKz0gb2Zmc2V0U2tldztcbiAgICAgICAgb2Zmc2V0U2tldyArPSB0b2tlbi52YWx1ZS5sZW5ndGggLSB0b2tlblZhbHVlLmxlbmd0aDtcbiAgICAgICAgdG9rZW4ubG9jWzFdICs9IG9mZnNldFNrZXc7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKG9mZnNldFNrZXcgJiYgdG9rZW4ubG9jKSB7XG4gICAgICB0b2tlbi5sb2NbMF0gKz0gb2Zmc2V0U2tldztcbiAgICAgIHRva2VuLmxvY1sxXSArPSBvZmZzZXRTa2V3O1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGlzU3RyaW5nXG4gICAgPyB0b2tlbnMubWFwKGQgPT4gZC52YWx1ZSkuam9pbignJylcbiAgICA6IHRva2Vucztcbn1cbiIsImltcG9ydCB7IHN0cmluZ2lmeVByZWZpeCwgc3RyaW5naWZ5UHJlZml4QWx0IH0gZnJvbSAnLi9zdHJpbmdpZnlQcmVmaXguanMnO1xuXG5mdW5jdGlvbiBxdW90ZUNvbG5hbWUgKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbW1xcXSMnQF0pL2csICdcXCckMScpO1xufVxuXG5mdW5jdGlvbiBuZWVkc0JyYWNlcyAoc3RyKSB7XG4gIHJldHVybiAhL15bYS16QS1aMC05XFx1MDBhMS1cXHVmZmZmXSskLy50ZXN0KHN0cik7XG59XG5cbmZ1bmN0aW9uIHRvU2VudGVuY2VDYXNlIChzdHIpIHtcbiAgcmV0dXJuIHN0clswXS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk7XG59XG5cbi8qKlxuICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgc3RydWN0dXJlZCByZWZlcmVuY2Ugb2JqZWN0LlxuICpcbiAqIGBgYGpzXG4gKiBzdHJpbmdpZnlTdHJ1Y3RSZWYoe1xuICogICBjb250ZXh0OiBbICd3b3JrYm9vay54bHN4JyBdLFxuICogICBzZWN0aW9uczogWyAnZGF0YScgXSxcbiAqICAgY29sdW1uczogWyAnbXkgY29sdW1uJywgJ0Bmb28nIF0sXG4gKiAgIHRhYmxlOiAndGFibGVOYW1lJyxcbiAqIH0pO1xuICogLy8gPT4gJ3dvcmtib29rLnhsc3ghdGFibGVOYW1lW1sjRGF0YV0sW0NvbHVtbjFdOltDb2x1bW4yXV0nXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1JlZmVyZW5jZVN0cnVjdH0gcmVmT2JqZWN0IEEgc3RydWN0dXJlZCByZWZlcmVuY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dICBPcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnhsc3g9ZmFsc2VdICBTd2l0Y2hlcyB0byB0aGUgYFsxXVNoZWV0MSFBMWAgb3IgYFsxXSFuYW1lYCBwcmVmaXggc3ludGF4IGZvcm0gZm9yIGV4dGVybmFsIHdvcmtib29rcy4gU2VlOiBbUHJlZml4ZXMubWRdKC4vUHJlZml4ZXMubWQpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRoaXNSb3c9ZmFsc2VdICBFbmZvcmNlcyB1c2luZyB0aGUgYFsjVGhpcyBSb3ddYCBpbnN0ZWFkIG9mIHRoZSBgQGAgc2hvcnRoYW5kIHdoZW4gc2VyaWFsaXppbmcgc3RydWN0dXJlZCByYW5nZXMuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc3RydWN0dXJlZCByZWZlcmVuY2UgaW4gc3RyaW5nIGZvcm1hdFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5U3RydWN0UmVmIChyZWZPYmplY3QsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IHhsc3gsIHRoaXNSb3cgfSA9IG9wdGlvbnM7XG4gIGxldCBzID0geGxzeFxuICAgID8gc3RyaW5naWZ5UHJlZml4QWx0KHJlZk9iamVjdClcbiAgICA6IHN0cmluZ2lmeVByZWZpeChyZWZPYmplY3QpO1xuXG4gIGlmIChyZWZPYmplY3QudGFibGUpIHtcbiAgICBzICs9IHJlZk9iamVjdC50YWJsZTtcbiAgfVxuICBjb25zdCBudW1Db2x1bW5zID0gcmVmT2JqZWN0LmNvbHVtbnM/Lmxlbmd0aCA/PyAwO1xuICBjb25zdCBudW1TZWN0aW9ucyA9IHJlZk9iamVjdC5zZWN0aW9ucz8ubGVuZ3RoID8/IDA7XG4gIC8vIHNpbmdsZSBzZWN0aW9uXG4gIGlmIChudW1TZWN0aW9ucyA9PT0gMSAmJiAhbnVtQ29sdW1ucykge1xuICAgIHMgKz0gYFsjJHt0b1NlbnRlbmNlQ2FzZShyZWZPYmplY3Quc2VjdGlvbnNbMF0pfV1gO1xuICB9XG4gIC8vIHNpbmdsZSBjb2x1bW5cbiAgZWxzZSBpZiAoIW51bVNlY3Rpb25zICYmIG51bUNvbHVtbnMgPT09IDEpIHtcbiAgICBzICs9IGBbJHtxdW90ZUNvbG5hbWUocmVmT2JqZWN0LmNvbHVtbnNbMF0pfV1gO1xuICB9XG4gIGVsc2Uge1xuICAgIHMgKz0gJ1snO1xuICAgIC8vIHNpbmdsZSBbI3RoaXMgcm93XSBzZWN0aW9ucyBnZXQgbm9ybWFsaXplZCB0byBhbiBAIGJ5IGRlZmF1bHRcbiAgICBjb25zdCBzaW5nbGVBdCA9ICF0aGlzUm93ICYmIG51bVNlY3Rpb25zID09PSAxICYmIHJlZk9iamVjdC5zZWN0aW9uc1swXS50b0xvd2VyQ2FzZSgpID09PSAndGhpcyByb3cnO1xuICAgIGlmIChzaW5nbGVBdCkge1xuICAgICAgcyArPSAnQCc7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bVNlY3Rpb25zKSB7XG4gICAgICBzICs9IHJlZk9iamVjdC5zZWN0aW9uc1xuICAgICAgICAubWFwKGQgPT4gYFsjJHt0b1NlbnRlbmNlQ2FzZShkKX1dYClcbiAgICAgICAgLmpvaW4oJywnKTtcbiAgICAgIGlmIChudW1Db2x1bW5zKSB7XG4gICAgICAgIHMgKz0gJywnO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBhIGNhc2Ugb2YgYSBzaW5nbGUgYWxwaGFudW1iZXJpYyBjb2x1bW4gd2l0aCBhIFsjdGhpcyByb3ddIGJlY29tZXMgW0Bjb2xdXG4gICAgaWYgKHNpbmdsZUF0ICYmIHJlZk9iamVjdC5jb2x1bW5zLmxlbmd0aCA9PT0gMSAmJiAhbmVlZHNCcmFjZXMocmVmT2JqZWN0LmNvbHVtbnNbMF0pKSB7XG4gICAgICBzICs9IHF1b3RlQ29sbmFtZShyZWZPYmplY3QuY29sdW1uc1swXSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bUNvbHVtbnMpIHtcbiAgICAgIHMgKz0gcmVmT2JqZWN0LmNvbHVtbnMuc2xpY2UoMCwgMilcbiAgICAgICAgLm1hcChkID0+IChgWyR7cXVvdGVDb2xuYW1lKGQpfV1gKSlcbiAgICAgICAgLmpvaW4oJzonKTtcbiAgICB9XG4gICAgcyArPSAnXSc7XG4gIH1cbiAgcmV0dXJuIHM7XG59XG4iLCJleHBvcnQgeyB0b2tlbml6ZSB9IGZyb20gJy4vbGV4ZXIuanMnO1xuZXhwb3J0IHsgcGFyc2UgfSBmcm9tICcuL3BhcnNlci5qcyc7XG5leHBvcnQgeyBhZGRUb2tlbk1ldGEgfSBmcm9tICcuL2FkZFRva2VuTWV0YS5qcyc7XG5leHBvcnQgeyB0cmFuc2xhdGVUb1IxQzEsIHRyYW5zbGF0ZVRvQTEgfSBmcm9tICcuL3RyYW5zbGF0ZS5qcyc7XG5leHBvcnQgeyBNQVhfQ09MUywgTUFYX1JPV1MgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5leHBvcnQgeyBtZXJnZVJlZlRva2VucyB9IGZyb20gJy4vbWVyZ2VSZWZUb2tlbnMuanMnO1xuZXhwb3J0IHsgZml4UmFuZ2VzIH0gZnJvbSAnLi9maXhSYW5nZXMuanMnO1xuZXhwb3J0IHtcbiAgaXNFcnJvcixcbiAgaXNGdW5jdGlvbixcbiAgaXNGeFByZWZpeCxcbiAgaXNMaXRlcmFsLFxuICBpc09wZXJhdG9yLFxuICBpc1JhbmdlLFxuICBpc1JlZmVyZW5jZSxcbiAgaXNXaGl0ZXNwYWNlXG59IGZyb20gJy4vaXNUeXBlLmpzJztcblxuZXhwb3J0IHsgZnJvbUNvbCB9IGZyb20gJy4vZnJvbUNvbC5qcyc7XG5leHBvcnQgeyB0b0NvbCB9IGZyb20gJy4vdG9Db2wuanMnO1xuXG5leHBvcnQge1xuICBwYXJzZUExUmVmLFxuICBzdHJpbmdpZnlBMVJlZixcbiAgYWRkQTFSYW5nZUJvdW5kc1xufSBmcm9tICcuL2ExLmpzJztcblxuZXhwb3J0IHtcbiAgcGFyc2VSMUMxUmVmLFxuICBzdHJpbmdpZnlSMUMxUmVmXG59IGZyb20gJy4vcmMuanMnO1xuXG5leHBvcnQgeyBzdHJpbmdpZnlTdHJ1Y3RSZWYgfSBmcm9tICcuL3N0cmluZ2lmeVN0cnVjdFJlZi5qcyc7XG5leHBvcnQgeyBwYXJzZVN0cnVjdFJlZiB9IGZyb20gJy4vcGFyc2VTdHJ1Y3RSZWYuanMnO1xuXG5pbXBvcnQge1xuICAvLyB0b2tlbiB0eXBlc1xuICBPUEVSQVRPUixcbiAgQk9PTEVBTixcbiAgRVJST1IsXG4gIE5VTUJFUixcbiAgRlVOQ1RJT04sXG4gIE5FV0xJTkUsXG4gIFdISVRFU1BBQ0UsXG4gIFNUUklORyxcbiAgQ09OVEVYVCxcbiAgQ09OVEVYVF9RVU9URSxcbiAgUkVGX1JBTkdFLFxuICBSRUZfQkVBTSxcbiAgUkVGX1RFUk5BUlksXG4gIFJFRl9OQU1FRCxcbiAgUkVGX1NUUlVDVCxcbiAgRlhfUFJFRklYLFxuICBVTktOT1dOLFxuICAvLyBBU1QgdHlwZXNcbiAgVU5BUlksXG4gIEJJTkFSWSxcbiAgUkVGRVJFTkNFLFxuICBMSVRFUkFMLFxuICBFUlJPUl9MSVRFUkFMLFxuICBDQUxMLFxuICBBUlJBWSxcbiAgSURFTlRJRklFUlxufSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5cbi8qKlxuICogQSBkaWN0aW9uYXJ5IG9mIHRoZSB0eXBlcyB1c2VkIHRvIGlkZW50aWZ5IHRva2VuIHZhcmlhbnRzLlxuICpcbiAqIEByZWFkb25seVxuICogQGNvbnN0YW50IHtPYmplY3Q8c3RyaW5nPn0gdG9rZW5UeXBlc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IE9QRVJBVE9SIC0gTmV3bGluZSAoYFxcbmApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQk9PTEVBTiAtIEJvb2xlYW4gbGl0ZXJhbCAoYFRSVUVgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEVSUk9SIC0gRXJyb3IgbGl0ZXJhbCAoYCNWQUxVRSFgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IE5VTUJFUiAtIE51bWJlciBsaXRlcmFsIChgMTIzLjRgLCBgLTEuNWUrMmApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gRlVOQ1RJT04gLSBGdW5jdGlvbiBuYW1lIChgU1VNYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBORVdMSU5FIC0gTmV3bGluZSBjaGFyYWN0ZXIgKGBcXG5gKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFdISVRFU1BBQ0UgLSBXaGl0ZXNwYWNlIGNoYXJhY3RlciBzZXF1ZW5jZSAoYCBgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFNUUklORyAtIFN0cmluZyBsaXRlcmFsIChgXCJMb3JlbSBpcHN1bVwiYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBDT05URVhUIC0gUmVmZXJlbmNlIGNvbnRleHQgKFtXb3JrYm9vay54bHN4XVNoZWV0MSlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBDT05URVhUX1FVT1RFIC0gUXVvdGVkIHJlZmVyZW5jZSBjb250ZXh0IChgJ1tNeSB3b3JrYm9vay54bHN4XVNoZWV0MSdgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJFRl9SQU5HRSAtIEEgcmFuZ2UgaWRlbnRpZmllciAoYEExYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRUZfQkVBTSAtIEEgcmFuZ2UgXCJiZWFtXCIgaWRlbnRpZmllciAoYEE6QWAgb3IgYDE6MWApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUkVGX1RFUk5BUlkgLSBBIHRlcm5hcnkgcmFuZ2UgaWRlbnRpZmllciAoYEIyOkJgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJFRl9OQU1FRCAtIEEgbmFtZSAvIG5hbWVkIHJhbmdlIGlkZW50aWZpZXIgKGBpbmNvbWVgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJFRl9TVFJVQ1QgLSBBIHN0cnVjdHVyZWQgcmVmZXJlbmNlIGlkZW50aWZpZXIgKGB0YWJsZVtbQ29sdW1uMV06W0NvbHVtbjJdXWApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gRlhfUFJFRklYIC0gQSBsZWFkaW5nIGVxdWFscyBzaWduIGF0IHRoZSBzdGFydCBvZiBhIGZvcm11bGEgKGA9YClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBVTktOT1dOIC0gQW55IHVuaWRlbnRpZmlhYmxlIHJhbmdlIG9mIGNoYXJhY3RlcnMuXG4gKiBAc2VlIHRva2VuaXplXG4gKi9cbmV4cG9ydCBjb25zdCB0b2tlblR5cGVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIE9QRVJBVE9SLFxuICBCT09MRUFOLFxuICBFUlJPUixcbiAgTlVNQkVSLFxuICBGVU5DVElPTixcbiAgTkVXTElORSxcbiAgV0hJVEVTUEFDRSxcbiAgU1RSSU5HLFxuICBDT05URVhULFxuICBDT05URVhUX1FVT1RFLFxuICBSRUZfUkFOR0UsXG4gIFJFRl9CRUFNLFxuICBSRUZfVEVSTkFSWSxcbiAgUkVGX05BTUVELFxuICBSRUZfU1RSVUNULFxuICBGWF9QUkVGSVgsXG4gIFVOS05PV05cbn0pO1xuXG4vKipcbiAqIEEgZGljdGlvbmFyeSBvZiB0aGUgdHlwZXMgdXNlZCB0byBpZGVudGlmeSBBU1Qgbm9kZSB2YXJpYW50cy5cbiAqXG4gKiBAcmVhZG9ubHlcbiAqIEBjb25zdGFudCB7T2JqZWN0PHN0cmluZz59IG5vZGVUeXBlc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFVOQVJZIC0gQSB1bmFyeSBvcGVyYXRpb24gKGAxMCVgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEJJTkFSWSAtIEEgYmluYXJ5IG9wZXJhdGlvbiAoYDEwKzEwYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRUZFUkVOQ0UgLSBBIHJhbmdlIGlkZW50aWZpZXIgKGBBMWApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTElURVJBTCAtIEEgbGl0ZXJhbCAobnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4pIChgMTIzYCwgYFwiZm9vXCJgLCBgZmFsc2VgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEVSUk9SIC0gQW4gZXJyb3IgbGl0ZXJhbCAoYCNWQUxVRSFgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IENBTEwgLSBBIGZ1bmN0aW9uIGNhbGwgZXhwcmVzc2lvbiAoYFNVTSgxLDIpYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBBUlJBWSAtIEFuIGFycmF5IGV4cHJlc3Npb24gKGB7MSwyOzMsNH1gKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IElERU5USUZJRVIgLSBBIGZ1bmN0aW9uIG5hbWUgaWRlbnRpZmllciAoYFNVTWApXG4gKiBAc2VlIHBhcnNlXG4gKi9cbmV4cG9ydCBjb25zdCBub2RlVHlwZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgVU5BUlksXG4gIEJJTkFSWSxcbiAgUkVGRVJFTkNFLFxuICBMSVRFUkFMLFxuICBFUlJPUjogRVJST1JfTElURVJBTCxcbiAgQ0FMTCxcbiAgQVJSQVksXG4gIElERU5USUZJRVJcbn0pO1xuIiwiaW1wb3J0IHsgaXNSYW5nZSB9IGZyb20gJy4vaXNUeXBlLmpzJztcbmltcG9ydCB7IHBhcnNlQTFSZWYsIHN0cmluZ2lmeUExUmVmLCBhZGRBMVJhbmdlQm91bmRzIH0gZnJvbSAnLi9hMS5qcyc7XG5pbXBvcnQgeyBwYXJzZVN0cnVjdFJlZiB9IGZyb20gJy4vcGFyc2VTdHJ1Y3RSZWYuanMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5U3RydWN0UmVmIH0gZnJvbSAnLi9zdHJpbmdpZnlTdHJ1Y3RSZWYuanMnO1xuaW1wb3J0IHsgdG9rZW5pemUgfSBmcm9tICcuL2xleGVyLmpzJztcbmltcG9ydCB7IFJFRl9TVFJVQ1QgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5cbi8vIFRoZXJlIGlzIG5vIFIxQzEgY291bnRlcnBhcnQgdG8gdGhpcy4gVGhpcyBpcyBiZWNhdXNlIHdpdGhvdXQgYW4gYW5jaG9yIGNlbGxcbi8vIGl0IGlzIGltcG9zc2libGUgdG8gZGV0ZXJtaW5lIGlmIGEgcmVsYXRpdmUrYWJzb2x1dGUgcmFuZ2UgKFJbMV1DWzFdOlI1QzUpXG4vLyBuZWVkcyB0byBiZSBmbGlwcGVkIG9yIG5vdC4gVGhlIHNvbHV0aW9uIGlzIHRvIGNvbnZlcnQgdG8gQTEgZmlyc3Q6XG4vLyB0cmFuc2xhdGVUb1JDKGZpeFJhbmdlcyh0cmFuc2xhdGVUb0ExKC4uLikpKVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgQTEgc3R5bGUgcmFuZ2VzIGFuZCBzdHJ1Y3R1cmVkIHJlZmVyZW5jZXMgaW4gYSBmb3JtdWxhIG9yIGxpc3Qgb2ZcbiAqIHRva2Vucy5cbiAqIFxuICogSXQgZW5zdXJlcyB0aGF0IHRoYXQgdGhlIHRvcCBhbmQgbGVmdCBjb29yZGluYXRlcyBvZiBhbiBBMSByYW5nZSBhcmUgb24gdGhlXG4gKiBsZWZ0LWhhbmQgc2lkZSBvZiBhIGNvbG9uIG9wZXJhdG9yOlxuICpcbiAqIGBCMjpBMWAg4oaSIGBBMTpCMmAgIFxuICogYDE6QTFgIOKGkiBgQTE6MWAgIFxuICogYEE6QTFgIOKGkiBgQTE6QWAgIFxuICogYEI6QWAg4oaSIGBBOkJgICBcbiAqIGAyOjFgIOKGkiBgMToyYCAgXG4gKiBgQTE6QTFgIOKGkiBgQTFgICBcbiAqXG4gKiBXaGVuIGB7IGFkZEJvdW5kczogdHJ1ZSB9YCBpcyBwYXNzZWQgYXMgYW4gb3B0aW9uLCB0aGUgbWlzc2luZyBib3VuZHMgYXJlXG4gKiBhbHNvIGFkZGVkLiBUaGlzIGNhbiBiZSBkb25lIHRvIGVuc3VyZSBFeGNlbCBjb21wYXRpYmxlIHJhbmdlcy4gVGhlIGZpeGVzXG4gKiB0aGVuIGFkZGl0aW9uYWxseSBpbmNsdWRlOlxuICpcbiAqIGAxOkExYCDihpIgYEExOjFgIOKGkiBgMToxYCAgXG4gKiBgQTpBMWAg4oaSIGBBMTpBYCDihpIgYEE6QWAgIFxuICogYEExOkFgIOKGkiBgQTpBYCAgXG4gKiBgQTE6MWAg4oaSIGBBOjFgICBcbiAqIGBCMjpCYCDihpIgYEIyOjEwNDg1NzZgICBcbiAqIGBCMjoyYCDihpIgYEIyOlhGRDJgICBcbiAqXG4gKiBTdHJ1Y3R1cmVkIHJhbmdlcyBhcmUgbm9ybWFsaXplZCBjbGVhbmVkIHVwIHRvIGhhdmUgY29uc2lzdGVudCBvcmRlciBhbmRcbiAqIGNhcGl0YWxpemF0aW9uIG9mIHNlY3Rpb25zIGFzIHdlbGwgYXMgcmVtb3ZpbmcgcmVkdW5kYW50IG9uZXMuXG4gKlxuICogUmV0dXJucyB0aGUgc2FtZSBmb3JtdWxhIHdpdGggdGhlIHJhbmdlcyB1cGRhdGVkLiBJZiBhbiBhcnJheSBvZiB0b2tlbnMgd2FzXG4gKiBzdXBwbGllZCwgdGhlbiBhIG5ldyBhcnJheSBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0geyhzdHJpbmcgfCBBcnJheTxUb2tlbj4pfSBmb3JtdWxhIEEgc3RyaW5nIChhbiBFeGNlbCBmb3JtdWxhKSBvciBhIHRva2VuIGxpc3QgdGhhdCBzaG91bGQgYmUgYWRqdXN0ZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dICBPcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFkZEJvdW5kcz1mYWxzZV0gIEZpbGwgaW4gYW55IHVuZGVmaW5lZCBib3VuZHMgb2YgcmFuZ2Ugb2JqZWN0cy4gVG9wIHRvIDAsIGJvdHRvbSB0byAxMDQ4NTc1LCBsZWZ0IHRvIDAsIGFuZCByaWdodCB0byAxNjM4My5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMueGxzeD1mYWxzZV0gIFN3aXRjaGVzIHRvIHRoZSBgWzFdU2hlZXQxIUExYCBvciBgWzFdIW5hbWVgIHByZWZpeCBzeW50YXggZm9ybSBmb3IgZXh0ZXJuYWwgd29ya2Jvb2tzLiBTZWU6IFtQcmVmaXhlcy5tZF0oLi9QcmVmaXhlcy5tZClcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudGhpc1Jvdz1mYWxzZV0gIEVuZm9yY2VzIHVzaW5nIHRoZSBgWyNUaGlzIFJvd11gIGluc3RlYWQgb2YgdGhlIGBAYCBzaG9ydGhhbmQgd2hlbiBzZXJpYWxpemluZyBzdHJ1Y3R1cmVkIHJhbmdlcy5cbiAqIEByZXR1cm5zIHsoc3RyaW5nIHwgQXJyYXk8VG9rZW4+KX0gQSBmb3JtdWxhIHN0cmluZyBvciB0b2tlbiBsaXN0IChkZXBlbmRpbmcgb24gd2hpY2ggd2FzIGlucHV0KVxuICovXG5leHBvcnQgZnVuY3Rpb24gZml4UmFuZ2VzIChmb3JtdWxhLCBvcHRpb25zID0geyBhZGRCb3VuZHM6IGZhbHNlIH0pIHtcbiAgaWYgKHR5cGVvZiBmb3JtdWxhID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmaXhSYW5nZXModG9rZW5pemUoZm9ybXVsYSwgb3B0aW9ucyksIG9wdGlvbnMpXG4gICAgICAubWFwKGQgPT4gZC52YWx1ZSlcbiAgICAgIC5qb2luKCcnKTtcbiAgfVxuICBpZiAoIUFycmF5LmlzQXJyYXkoZm9ybXVsYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpeFJhbmdlcyBleHBlY3RzIGFuIGFycmF5IG9mIHRva2VucycpO1xuICB9XG4gIGNvbnN0IHsgYWRkQm91bmRzLCByMWMxLCB4bHN4LCB0aGlzUm93IH0gPSBvcHRpb25zO1xuICBpZiAocjFjMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZml4UmFuZ2VzIGRvZXMgbm90IGhhdmUgYW4gUjFDMSBtb2RlJyk7XG4gIH1cbiAgbGV0IG9mZnNldFNrZXcgPSAwO1xuICByZXR1cm4gZm9ybXVsYS5tYXAodCA9PiB7XG4gICAgY29uc3QgdG9rZW4gPSB7IC4uLnQgfTtcbiAgICBpZiAodC5sb2MpIHtcbiAgICAgIHRva2VuLmxvYyA9IFsgLi4udC5sb2MgXTtcbiAgICB9XG4gICAgbGV0IG9mZnNldERlbHRhID0gMDtcbiAgICBpZiAodG9rZW4udHlwZSA9PT0gUkVGX1NUUlVDVCkge1xuICAgICAgY29uc3Qgc3JlZiA9IHBhcnNlU3RydWN0UmVmKHRva2VuLnZhbHVlLCB7IHhsc3ggfSk7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHN0cmluZ2lmeVN0cnVjdFJlZihzcmVmLCB7IHhsc3gsIHRoaXNSb3cgfSk7XG4gICAgICBvZmZzZXREZWx0YSA9IG5ld1ZhbHVlLmxlbmd0aCAtIHRva2VuLnZhbHVlLmxlbmd0aDtcbiAgICAgIHRva2VuLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUmFuZ2UodG9rZW4pKSB7XG4gICAgICBjb25zdCByZWYgPSBwYXJzZUExUmVmKHRva2VuLnZhbHVlLCB7IHhsc3gsIGFsbG93VGVybmFyeTogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IHJhbmdlID0gcmVmLnJhbmdlO1xuICAgICAgLy8gZmlsbCBtaXNzaW5nIGRpbWVuc2lvbnM/XG4gICAgICBpZiAoYWRkQm91bmRzKSB7XG4gICAgICAgIGFkZEExUmFuZ2VCb3VuZHMocmFuZ2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV3VmFsdWUgPSBzdHJpbmdpZnlBMVJlZihyZWYsIHsgeGxzeCB9KTtcbiAgICAgIG9mZnNldERlbHRhID0gbmV3VmFsdWUubGVuZ3RoIC0gdG9rZW4udmFsdWUubGVuZ3RoO1xuICAgICAgdG9rZW4udmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9XG4gICAgLy8gZW5zdXJlIHRoYXQgcG9zaXRpb25pbmcgaXMgc3RpbGwgY29ycmVjdFxuICAgIGlmIChvZmZzZXRTa2V3IHx8IG9mZnNldERlbHRhKSB7XG4gICAgICBpZiAodG9rZW4ubG9jKSB7XG4gICAgICAgIHRva2VuLmxvY1swXSArPSBvZmZzZXRTa2V3O1xuICAgICAgfVxuICAgICAgb2Zmc2V0U2tldyArPSBvZmZzZXREZWx0YTtcbiAgICAgIGlmICh0b2tlbi5sb2MpIHtcbiAgICAgICAgdG9rZW4ubG9jWzFdICs9IG9mZnNldFNrZXc7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgb2Zmc2V0U2tldyArPSBvZmZzZXREZWx0YTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuO1xuICB9KTtcbn1cblxuIl0sIm5hbWVzIjpbIk9QRVJBVE9SIiwiT1BFUkFUT1JfVFJJTSIsIkJPT0xFQU4iLCJFUlJPUiIsIk5VTUJFUiIsIkZVTkNUSU9OIiwiTkVXTElORSIsIldISVRFU1BBQ0UiLCJTVFJJTkciLCJDT05URVhUX1FVT1RFIiwiQ09OVEVYVCIsIlJFRl9SQU5HRSIsIlJFRl9CRUFNIiwiUkVGX1RFUk5BUlkiLCJSRUZfTkFNRUQiLCJSRUZfU1RSVUNUIiwiRlhfUFJFRklYIiwiVU5LTk9XTiIsIlVOQVJZIiwiQklOQVJZIiwiUkVGRVJFTkNFIiwiTElURVJBTCIsIkVSUk9SX0xJVEVSQUwiLCJDQUxMIiwiTEFNQkRBIiwiTEVUIiwiQVJSQVkiLCJJREVOVElGSUVSIiwiTUFYX0NPTFMiLCJNQVhfUk9XUyIsInJlZlBhcnRzVHJlZSIsInBhY2tMaXN0IiwiZiIsIm5vZGUiLCJsZW5ndGgiLCJrZXkiLCJzbGljZSIsImZvckVhY2giLCJydW4iLCJjb25jYXQiLCJyZXZlcnNlIiwibWF0Y2hlciIsInRva2VucyIsImN1cnJOb2RlIiwiYW5jaG9ySW5kZXgiLCJpbmRleCIsImkiLCJtYXgiLCJ0b2tlbiIsInR5cGUiLCJ2YWx1ZSIsIm1lcmdlUmVmVG9rZW5zIiwidG9rZW5saXN0IiwiZmluYWxUb2tlbnMiLCJ2YWxpZCIsInN0YXJ0IiwiaiIsImxvYyIsInJlX0VSUk9SIiwiaXNXUyIsImMiLCJsZXhDb250ZXh0Iiwic3RyIiwicG9zIiwib3B0aW9ucyIsImMwIiwiY2hhckNvZGVBdCIsImJyMSIsImJyMiIsInhsc3giLCJhZHZSYW5nZU9wIiwiY2FuRW5kUmFuZ2UiLCJjYW5FbmRQYXJ0aWFsUmFuZ2UiLCJhZHZBMUNvbCIsInN0b3AiLCJjb2wiLCJhZHZBMVJvdyIsInJvdyIsImxleFIxQzFQYXJ0IiwiaXNSb3ciLCJkaWdpdHMiLCJjMSIsInNpZ24iLCJyZWxhdGl2ZSIsIk1hdGgiLCJtaW4iLCJpc05hTiIsIk1BWCIsImxleFJhbmdlIiwicjFjMSIsInAiLCJyMSIsIm9wIiwicHJlT3AiLCJyMiIsImMyIiwiYWxsb3dUZXJuYXJ5IiwibGV4UmFuZ2VSMUMxIiwibGVmdCIsInJpZ2h0IiwiYm90dG9tIiwidG9wIiwibWVyZ2VSZWZzIiwibGV4UmFuZ2VBMSIsIkJSX0NMT1NFIiwiQlJfT1BFTiIsImtleVRlcm1zIiwiaGVhZGVycyIsImRhdGEiLCJ0b3RhbHMiLCJhbGwiLCJmeiIsImEiLCJPYmplY3QiLCJmcmVlemUiLCJzZWN0aW9uTWFwIiwibWF0Y2hLZXl3b3JkIiwic2tpcFdoaXRlc3BhY2UiLCJtYXRjaENvbHVtbiIsImFsbG93VW5icmFjZWQiLCJjb2x1bW4iLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJwYXJzZVNSYW5nZSIsImNvbHVtbnMiLCJtIiwidGVybXMiLCJrIiwidGVybSIsInRvTG93ZXJDYXNlIiwicHVzaCIsImV4cGVjdF9tb3JlIiwibGVmdENvbCIsInJpZ2h0Q29sIiwic2VjdGlvbnMiLCJsZXhTdHJ1Y3R1cmVkIiwic3RydWN0RGF0YSIsImFkdkRpZ2l0cyIsImxleE5hbWVkIiwicyIsImlzRmluaXRlIiwibGVuIiwibGV4ZXJzIiwibGFzdEluZGV4IiwiZXhlYyIsImMzIiwiYzQiLCJ1bnRlcm1pbmF0ZWQiLCJsZWFkIiwiZnJhYyIsImV4cCIsImxleGVyc1JlZnMiLCJvcHRzIiwib3BMZW4iLCJpc1R5cGUiLCJ0IiwiZGVmYXVsdE9wdGlvbnMiLCJ3aXRoTG9jYXRpb24iLCJuZWdhdGl2ZU51bWJlcnMiLCJpc1RleHRUb2tlbiIsImNhdXNlc0JpbmFyeU1pbnVzIiwiZ2V0VG9rZW5zIiwiZngiLCJ0b2tlbkhhbmRsZXJzIiwibGV0T3JMYW1iZGEiLCJ1bmtub3duUkMiLCJ0cmltT3BzIiwidGFpbDAiLCJ0YWlsMSIsImxhc3RUb2tlbiIsInB1c2hUb2tlbiIsImlzQ3VyclVua25vd24iLCJpc0xhc3RVbmtub3duIiwic3RhcnRzV2l0aCIsIm51bUhhbmRsZXJzIiwic3RhcnRQb3MiLCJ0ZXN0IiwidmFsTEMiLCJsYXN0MSIsIm1pbnVzIiwicG9wIiwid2l0aGluQ2FsbCIsInBhcmVuRGVwdGgiLCJ2IiwiZml4UkNOYW1lcyIsImJlZm9yZSIsImFmdGVyIiwidG9rZW5pemUiLCJmb3JtdWxhIiwiaXNSYW5nZSIsImlzUmVmZXJlbmNlIiwiaXNMaXRlcmFsIiwiaXNFcnJvciIsImlzV2hpdGVzcGFjZSIsImlzRnVuY3Rpb24iLCJpc0Z4UHJlZml4IiwiaXNPcGVyYXRvciIsIkVORCIsInJlZkZ1bmN0aW9ucyIsInN5bWJvbFRhYmxlIiwiY3VycmVudE5vZGUiLCJ0b2tlbkluZGV4IiwicGVybWl0QXJyYXlSYW5nZXMiLCJwZXJtaXRBcnJheUNhbGxzIiwibG9vc2VSZWZDYWxscyIsImlzUmVmZXJlbmNlRnVuY3Rpb25OYW1lIiwiZm5OYW1lIiwiaW5jbHVkZXMiLCJ0b1VwcGVyQ2FzZSIsImlzUmVmZXJlbmNlTm9kZSIsIm9wZXJhdG9yIiwiY2FsbGVlIiwibmFtZSIsImhhbHQiLCJtZXNzYWdlIiwiYXRJbmRleCIsImVyciIsIkVycm9yIiwic291cmNlIiwibWFwIiwiZCIsImpvaW4iLCJzb3VyY2VPZmZzZXQiLCJyZWR1Y2UiLCJyZWZJc1VwY29taW5nIiwiYWxsb3dPcGVyYXRvcnMiLCJuZXh0IiwiaXNSZWZlcmVuY2VUb2tlbiIsInRyaW0iLCJhZHZhbmNlIiwiZXhwZWN0TmV4dCIsImxlZnROb2RlIiwiaWQiLCJoYXZlUmVmIiwicG9zc2libGVXU09wIiwibmV4dElzQ2FsbCIsImNyZWF0ZSIsImV4cHJlc3Npb24iLCJyYnAiLCJudWQiLCJsYnAiLCJsZWQiLCJvcmlnaW5hbF9zeW1ib2wiLCJzeW1ib2wiLCJicCIsImluZml4IiwidGhpcyIsImFyZ3VtZW50cyIsInBvc3RmaXgiLCJwcmVmaXgiLCJzdWJleHByIiwicmFuZ2VJbmZpeCIsImNvbW1hIiwidW5pb25SZWZzIiwiZW5hYmxlIiwiY3VyclN0YXRlIiwicGFyc2VMYW1iZGEiLCJhcmdzIiwiYXJnTmFtZXMiLCJib2R5IiwiZG9uZSIsInByZXZTdGF0ZSIsImFyZ1Rva2VuSW5kZXgiLCJhcmciLCJraW5kIiwiY3Vyck5hbWUiLCJwYXJhbXMiLCJwYXJzZUxldCIsInZhbHMiLCJhcmdDb3VudGVyIiwiYWRkQXJndW1lbnQiLCJsYXN0QXJnIiwibGFzdFdhc0NvbW1hIiwidW5kZWZpbmVkIiwiZGVjbGFyYXRpb25zIiwiaW5pdCIsInNwbGl0UHJlZml4Iiwic3RyaW5nc09ubHkiLCJpbkJyYWNlIiwiY3VyclN0ciIsInBhcnRzIiwiZmx1c2giLCJicmFjZWQiLCJjaGFyIiwic3BsaXRDb250ZXh0IiwiY29udGV4dFN0cmluZyIsImNvbnRleHQiLCJzcGxpdENvbnRleHRYbHN4IiwiY3R4Iiwid29ya2Jvb2tOYW1lIiwic2hlZXROYW1lIiwiaXRlbSIsInJhdyIsInJlcGxhY2UiLCJlIiwibGNGbiIsImNhbGwiLCJjbG9zZVBhcmVuIiwicm93cyIsImNsb3NpbmdCcmFjZSIsImVsZW1lbnRzIiwicFJhbmdlT3AiLCJwUmFuZ2UiLCJyMCIsInBQYXJ0aWFsIiwicFJhbmdlMiIsInBCYW5nIiwicEJlYW0iLCJwU3RydWN1cmVkIiwic3RydWN0IiwicENvbnRleHQiLCJzcGxpdHRlciIsInBOYW1lZCIsInZhbGlkUnVucyIsInZhbGlkUnVuc05hbWVkIiwicGFyc2VSZWYiLCJyZWYiLCJhbGxvd05hbWVkIiwicmVmRGF0YSIsInNoaWZ0IiwicnVucyIsImV2ZXJ5IiwicGFyc2UiLCJhc3NpZ24iLCJjaGFyRnJvbSIsInRvQ29sIiwiY29sdW1uSW5kZXgiLCJmcm9tQ29sIiwiY29sdW1uU3RyaW5nIiwieCIsImwiLCJuIiwicmVCYW5uZWRDaGFycyIsInN0cmluZ2lmeVByZWZpeCIsInByZSIsInF1b3RlIiwibnRoIiwic2NvcGUiLCJzdHJpbmdpZnlQcmVmaXhBbHQiLCJjbGFtcCIsInZhbCIsInRvQ29sU3RyIiwidG9Sb3dTdHIiLCJyIiwicmFuZ2VPcGVyYXRvciIsInRyaW1EaXJlY3Rpb24iLCJoZWFkIiwidGFpbCIsInNwbGl0QTEiLCJyb3dTdHIiLCJmcm9tQTEiLCJyYW5nZVN0cmluZyIsIiR0b3AiLCIkbGVmdCIsIiRib3R0b20iLCIkcmlnaHQiLCJwYXJ0MSIsIm9wMSIsInBhcnQyIiwib3AyIiwicGFydDMiLCJzcGxpdCIsInAxIiwicDIiLCJwYXJzZUExUmVmIiwicmVmU3RyaW5nIiwicmFuZ2UiLCJzdHJpbmdpZnlBMVJlZiIsInJlZk9iamVjdCIsIm5vTGVmdCIsIm5vUmlnaHQiLCJub1RvcCIsIm5vQm90dG9tIiwidG9BMSIsImFkZEExUmFuZ2VCb3VuZHMiLCJwYXJzZVN0cnVjdFJlZiIsInRhYmxlIiwic2FtZVZhbHVlIiwiYiIsInNhbWVBcnJheSIsIkFycmF5IiwiaXNBcnJheSIsInNhbWVTdHIiLCJ0b0Nvb3JkIiwiaXNBYnMiLCJwYXJzZVIxQzFQYXJ0IiwiJHIwIiwiJGMwIiwicm0iLCJwYXJzZUludCIsImNtIiwiZnJvbVIxQzEiLCJmaW5hbCIsIm92ZXJmbG93IiwiZXh0ZW5kVG8iLCIkcjEiLCIkYzEiLCJwYXJzZVIxQzFSZWYiLCJzdHJpbmdpZnlSMUMxUmVmIiwibnVsbFIwIiwibnVsbEMwIiwibnVsbFIxIiwibnVsbEMxIiwiaGFzVHJpbSIsInNfcjAiLCJzX3IxIiwic19jMCIsInNfYzEiLCJ0b1IxQzEiLCJjYWxjIiwiYWJzIiwidlgiLCJhWCIsInNldHRpbmdzIiwidG9GaXhlZCIsImJhc2UiLCJ3cmFwRWRnZXMiLCJOYU4iLCJxdW90ZUNvbG5hbWUiLCJ0b1NlbnRlbmNlQ2FzZSIsInN0cmluZ2lmeVN0cnVjdFJlZiIsInRoaXNSb3ciLCJudW1Db2x1bW5zIiwibnVtU2VjdGlvbnMiLCJzaW5nbGVBdCIsInRva2VuVHlwZXMiLCJub2RlVHlwZXMiLCJwYXJlblN0YWNrIiwiYXJyYXlTdGFydCIsInVpZCIsImdldElEZXIiLCJrbm93blJlZnMiLCJnZXRDdXJyRGVwdGgiLCJkZXB0aCIsImNvdW50ZXIiLCJwYWlySWQiLCJncm91cElkIiwiZXJyb3IiLCJhZGRDb250ZXh0Iiwia25vd24iLCJmaW5kIiwicmVmQSIsInJlZkIiLCJpc0VxdWl2YWxlbnQiLCJmaXhSYW5nZXMiLCJhZGRCb3VuZHMiLCJvZmZzZXRTa2V3Iiwib2Zmc2V0RGVsdGEiLCJuZXdWYWx1ZSIsInJvb3QiLCJhbmNob3JDZWxsIiwiYW5jaG9yIiwiaXNTdHJpbmciLCJyZWZPcHRzIiwidG9rZW5WYWx1ZSJdLCJtYXBwaW5ncyI6ImFBQU8sTUFBTUEsRUFBVyxXQUNYQyxFQUFnQixnQkFDaEJDLEVBQVUsT0FDVkMsRUFBUSxRQUNSQyxFQUFTLFNBQ1RDLEVBQVcsT0FDWEMsRUFBVSxVQUNWQyxFQUFhLGFBQ2JDLEVBQVMsU0FDVEMsRUFBZ0IsZ0JBQ2hCQyxFQUFVLFVBQ1ZDLEVBQVksUUFDWkMsRUFBVyxhQUNYQyxFQUFjLGdCQUNkQyxFQUFZLGNBQ1pDLEVBQWEsYUFDYkMsRUFBWSxZQUNaQyxFQUFVLFVBRVZDLEVBQVEsa0JBQ1JDLEVBQVMsbUJBQ1RDLEVBQVksc0JBQ1pDLEVBQVUsVUFDVkMsRUFBZ0IsZUFDaEJDLEVBQU8saUJBQ1BDLEVBQVMsbUJBQ1RDLEVBQU0sZ0JBQ05DLEVBQVEsa0JBQ1JDLEVBQWEsYUFHYkMsRUFBWSxNQUNaQyxFQUFZLFFDSW5CQyxFQUFlLENBQUEsRUFDckIsU0FBU0MsRUFBVUMsRUFBR0MsR0FDcEIsR0FBSUQsRUFBRUUsT0FBUSxDQUNaLE1BQU1DLEVBQU1ILEVBQUUsR0FDZEMsRUFBS0UsR0FBT0YsRUFBS0UsSUFBUSxDQUFBLEVBQ3pCSixFQUFTQyxFQUFFSSxNQUFNLEdBQUlILEVBQUtFLEdBQzVCLE1BRUVGLEVBQVEsR0FBSSxDQUVoQixDQTFDdUIsQ0FDckIsQ0FBRXRCLEVBQVcsSUFBS0EsR0FDbEIsQ0FBRUEsRUFBVyxLQUFNQSxHQUNuQixDQUFFQSxF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
|